#coding: utf-8
"""
Lista de pacotes que precisamos para iniciar este estudo.
Numpy, Seaborn, Matplot e pandas
Numpy
.....
Nos dará a facilidade de criar os bins.
Seaborn
.......
Apresentará os dados.
Matplot
.......
É uma necessidade do Seaborn.
Pandas
......
Análises entre os dados.
"""
%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pandas import Series, DataFrame
import numpy.ma as ma
from scipy.stats import mstats, kendalltau
The total distance $x$ traveled during a trip can be obtained by integrating the velocity $v(t)$ over the duration $T$ of the trip: \begin{align} x = \int_0^T v(t)\, dt \end{align}
"""
#..............................
#
# 1 - ANÁLISE DAS QUANTIDADES
#
#..............................
"""
"""
#..............................
#
# 1.1 - GRANULARIDADE DE ANO
#
#..............................
"""
path = '/Users/zegildo/Documents/workspace/'
#path = '/home/zegildo/workspace/'
"""
Apresenta um resumo da quantidade de notícias coletadas
entre os anos 2000 e 2015 para cada um dos jornais de domínio público
de interesse: Folha de São Paulo, Estadão e G1.
"""
#Define a cor de background da imagem
sns.set(style="whitegrid")
#Ler o arquivo contendo as informações de jornais e suas respectivas quantidades
volNewsYear = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticias-Ano.csv')
#Constrói o gráfico baseado em:
# x: coluna que irá compor o eixo X.
# y: coluna que irá compor o eixo Y.
# hue: tradução da legenda.
# size: tamanho que será apresentada a imagem.
# kind: tipo de gráfico que será gerado (barras, pontos, contagem...)
# aspect: a distância entre os elementos do eixo X.
g = sns.factorplot(x="ano", y="quantidade", hue="jornal", data=volNewsYear,
size=6, kind="bar", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantida de Noticipas Publicadas por Ano")
"""
Fatos e Conclusões:
...................
1- Entre os anos de [2001,2006] há apenas publicações do ESTADÃO.
O site de notícias G1 surgiu apenas em 2006 como é dito aqui https://pt.wikipedia.org/wiki/G1.
A Folha de São Paulo por algum motivo inibe qualquer consulta ao caderno de economia a notícias entre esses anos.
Apensar de manter uma política de limitar a leitura diária de artigos, assim como a Folha de São Paulo, o ESTADÃO
apresenta-se democrático e empenhado em fornecer fielmente resultados de buscas ao longo dos anos.
2- O G1 apesar de não possuir política de acesso a leitura de seus artigos econômicos, e publicá-los livremente
publica muito mais informação econômica que Folha de São Paulo e ESTADÃO juntos. É possível ainda plantear a hipótese
de que por alguma razão seja política (alguém mandou tirar), comercial (esse período é importante e devemos cobrar
por essas notícias) ou até mesmo tecnológica (é muito caro disponibilizar todas essas notícias). Aqui transcorre incoerência
visto que notícias do ano 2000 estão presentes para a Folha de São Paulo.
3 - Notícias publicadas com data de 1969 estão publicadas para o ESTADÃO mesmo se referindo a acontecimentos contemporâneros.
4 - Notícias publicadas em determinado momento no passado foram retiradas das ferramentas de busca das páginas dos jornais
da Folha de São Paulo e do ESTADÃO.
5 - G1 disponibiliza notícias apenas a partir de 2010. Ou seja, até 5 anos antes do ano atual.
"""
"""
Evidências para os jornais:
Folha 2001,2002,2003,2004,2005,2006
...................................
ESTADÃO notícias com datas de 1969
..................................
"""
from IPython.display import Image
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_010.png')
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_011.png')
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_009.png')
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_012.png')
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_013.png')
Image(filename=path+'PhD/src/scriptPython/evidencias/Selecao_014.png')
"""
Diante do exposto, daremos um zoom no período que varia entre 2010 e 2015.
"""
#Gera valores entre 2010 e 2015 inclusive [2010,2015]
anosDeInteresse = range(2010,2016)
# Seleciona apenas um subset do conjunto total com os anos entre [2010,2015]
vol_2010_2015 = volNewsYear[volNewsYear.ano.isin(anosDeInteresse)]
sns.set(style="whitegrid")
g = sns.factorplot(x="ano", y="quantidade", hue="jornal", data=vol_2010_2015,
size=6, kind="bar", palette="muted", aspect=2)
g.set_ylabels("Volume de Noticipas Publicadas por Ano")
"""
Apresentação a densidade de probabilidade entre 2010 e 2015 para os Jornais G1, Folha de São Paulo e
"""
sns.set(rc={"figure.figsize": (15, 8)},style="white")
volTotal = pd.read_csv(path+'PhD/src/scriptPython/volumeTotalGranularidades.csv')
#Gera valores entre 2010 e 2015 inclusive [2010,2015]
anosDeInteresse = range(2010,2016)
# Seleciona apenas um subset do conjunto total com os anos entre [2010,2015]
vol_2010_2015 = volTotal[volTotal.Ano.isin(anosDeInteresse)]
"""
Para o Jornal G1.
"""
vol_2010_2015_G1 = vol_2010_2015[vol_2010_2015.Jornal.isin(["G1"])]
quantidade = [row.Quantidade for index,row in vol_2010_2015_G1.iterrows()]
sns.distplot(quantidade, hist=True);
"""
Comentários para o G1:
......................
O gráfico apresenta a função de desidade de probabilidade para a quantidade de notícias publicadas no jornal G1 entre
2010e 2015.
O que chama atenção é que essa distribuição bimodal nos apresenta uma probabilidade crescente entre 100 e 200 que é atípica.
Lendo de outra forma, é gradualmente mais provável que um determinado dia tenha entre 150 e 200 notícias publicadas
que entre 50 e 100 notícias.
Esse perfil informa uma tendência ao sensacionalismo. Enquanto para a maioria dos dias há poucas notícias econômicas
publicadas,para alguns temas, há uma explosão de interesse em publicação em um determinado dia.
Há mais probabilidade em encontrar dias com mais de 200 notícias que dias entre 75 e 100 publicações.
Outro fato que reforça a hipótese sensacionalista é a presença de dias com mais de 300 publicações econômicas. É tecnicamente
distoante crer que leitores sejam capazes de analisar 300 publicações. O que abre margem também para a falta de cuidado
com detalhes e o acabamento da notícia.
"""
"""
Apresentação a densidade de probabilidade entre 2010 e 2015 para a Folha de São Paulo.
"""
vol_2010_2015_FOLHASP = vol_2010_2015[vol_2010_2015.Jornal.isin(["FOLHASP"])]
quantidade = [row.Quantidade for index,row in vol_2010_2015_FOLHASP.iterrows()]
sns.distplot(quantidade, hist=True);
"""
Comentários para a Folha de São Paulo:
......................................
Diferente do G1 o gráfico de densidade de probablidade da FOLHA DE SÃO PAULO apresenta-se bem mais compreensível.
1 - A amplitude. Um dia com um número de publicações grande é 120. Menos da metade para o G1.
2 - Com excessão do intervalo entre [20,25] (o que a primeira vista abre margem para a bimodalidade), a distribuição
é plenamente justificável. A partir de 50 publicações há uma diminuição gradativa da probablidade da quantidade
de publicaçñoes em um determinado dia aumentar.
"""
"""
Apresentação a densidade de probabilidade entre 2010 e 2015 para o ESTADAO
"""
vol_2010_2015_ESTADAO = vol_2010_2015[vol_2010_2015.Jornal.isin(["ESTADAO"])]
quantidade = [row.Quantidade for index,row in vol_2010_2015_ESTADAO.iterrows()]
sns.distplot(quantidade, hist=True);
"""
Comentários para o ESTADÃO:
...........................
Com o ESTADÃO revela-se o fenômeno intermediário entre o G1 e a FOLHA DE SÃO PAULO.
1 - Do ponto de vista da amplitude da quantidade, temos o maior valor de notícias diárias 150. Que seria a metade do G1.
2 - Do ponto de vista do desenho da curva. Há uma trimodalidade. A bimodalidade inicial é justificavel pela pouca variação.
Sendo que há realmente dias onde há mais novidades que outros e é naturalmente compreensível a curvatura.
Por outro lado, o pico nos 75 abre margem para uma certa tendência a forçar publicações sobre determinados assuntos econômicos
ou uma tendência a influencia o leitor ao invés de apenas informar.
"""
"""
Apresentação o gráfico de bloxplots entre 2010 e 2015
para visualizar a disperção entre as quantidades de
notícias publicadas ao longo de cada ano.
"""
anosDeInteresse = range(2010,2016)
vol_2010_2015 = volTotal[volTotal.Ano.isin(anosDeInteresse)]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks")
sns.boxplot(x="Ano", y="Quantidade", hue="Jornal", data=vol_2010_2015, palette="PRGn")
sns.despine(offset=10, trim=True)
"""
Comentários sobre a disperção de publicações entre os jornais:
.................................................................
O bloxplot apresenta o comportamento da disperção das quantidades de notícias discutidas até aqui.
1 - Para todos os jornais analisados os 50% superior de informação contidos no box é o mais representativo.
2 - A FOLHA DE SÃO PAULO tende a manter um índice de tendência central de 50 notícias ao dia para todos os anos analisados.
3 - O G1 apresenta a maior variabilidade e amplitude entre todos os jornais. Tendo aproximadamente 200 notícias publicadas
por dia segundo o índice de tendência central.
4 - A comportamento do índice de tendência central do jornal G1 é acompanhada de forma didedigna pelo jornal ESTADÃO
ao longo dos anos.
5 - No ano de 2013 ocorre uma atipicidade, é o único ano onde a mediana de publicações da folha de são paulo supera o ESTADÃO.
"""
"""
Bloxplot para distribuição das quantidades de notícias por dia entre tres jornais entre [2010,2015]
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="muted", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="Jornal", data=vol_2010_2015,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="Jornal", data=vol_2010_2015,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Quantidade de dias sem notícias economicas por ano para um dos jornais analisados.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="white")
vol_2010_2015 = volTotal[volTotal.Ano.isin(range(2010,2015))]
vol_2010_2015 = vol_2010_2015[["Ano","Jornal","Quantidade"]]
vol_SemNoticas_2010_2015 = vol_2010_2015[vol_2010_2015.Quantidade.isin([0])]
vol_SemNoticas_2010_2015.groupby(['Ano', 'Jornal']).size()
"""
Fatos e conclusões:
...................
- Para todos os jornais não há uma quantidade fixa de notícias publicadas por dia.
- A quantidade de publicações do G1 é bastante irregular, alcançando toda a escala
do histograma.Por su vez, Folha de São Paulo e ESTADÃO publicam diariamente
entre 1 e 100 notícias econômicas.
- Apesar de o G1 ser o jornal que apresente mais publicação ao logo do ano,
sua irregularidade faz com que alguns dias existam poucas notícias econômicas,
enquanto outros dias a quantidade de notícias publicadas é enorme ultrapassando
seguidamente o valor de 250 pubicações.
Tal característica aponta para indícios de sensacionalismo para alguns fatos econômicos isolados,
sem consistência em cobrir fatores econômicos diarimente.
O ESTADÃO é veículo mais regular em seu caderno econômico, publicando em média de 50 notícias diariamente
sem supervalorizar (em quantidade) algum fato econômico isolado.
"""
"""
#..............................
#
# 1.2 - GRANULARIDADE DE MÊS
#
#..............................
"""
"""
Quantidade de notícias postadas em cada mes para cada um dos Jornais.
"""
volMonths = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticias-Mes.csv')
g = sns.factorplot(x="mes", y="quantidade", hue="jornal", data=volMonths,
size=6, kind="point", palette="muted", aspect=2)
g.set_ylabels("Quantida de Noticipas Publicadas por Meses")
"""
Comentários:
............
1 - AGOSTO é o mês com maior quantidade de publicações econômicas para os jornais.
2 - A partir de AGOSTO existe uma tendência de queda para a quantidade de publicações de notícias econômicas
em todos os jornais observador.
3 - Para G1 e FOLHA DE SÃO PAULO há um crescimento gradativo de junho até agosto.
4 - O mês de MAIO apresenta uma notória intensificação de notícias econômicas para todos os jornais.
"""
"""
Bloxplot para distribuição de notícias ao longo dos meses entre tres jornais entre [2010,2015]
para o Jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="Mes", data=vol_2010_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="Mes", data=vol_2010_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de notícias ao longo dos meses entre tres jornais entre [2010,2015]
para o Jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="Mes", data=vol_2010_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="Mes", data=vol_2010_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de notícias ao longo dos meses entre tres jornais entre [2010,2015]
para o Jornal ESTADÃO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="Mes", data=vol_2010_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="Mes", data=vol_2010_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
Analisando os bloxplot por meses:
1 - O G1 apresenta maior índice de tendência central para o mês de FEVEREIRO ~50 notícias
2 - A FOLHA DE SÃO PAULO maior índice de tendência central para o mês de AGOSTO ~45 notícias
3 - ESTADÃO maior índice de tendência central para o mês de MAIO ~47 notícias.
É corriqueiro a presença de outliers, um dia no mês de agosto onde a quantidade de publicações explode.
"""
"""
O objetivo da análise a seguir é tentar identificar dias onde hajam maior quantidade de
e se há dias [1,31] mais prováveis para haverem notícias para cada jornal.
"""
"""
Quantidade de notícias publicadas por dia para cada um dos jornais.
"""
volByDay = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticias-Dia.csv')
g = sns.factorplot(x="dia", y="quantidade", hue="jornal", data=volByDay,
size=6, kind="point", palette="muted", aspect=2)
g.set_ylabels("Quantida de Noticipas Publicadas por Dia")
"""
Comentários:
............
1 - O dia 14 é notoriamente marcado pelo crescimento no volume de publicações para todos os jornais.
2 - Há um decescimento na quantidade de publicações entre [22,24] e um crescimento gradual até o dia 27.
Também é notório a diminuição da quantidade de publicações de notícias econômicas em todos os jornais após o dia 27.
3 - Há um crescimento entre [2,5] para todos os jornais.
4 - A FOLHA DE SÃO PAULO apresenta menos variação que os demais jornais.
"""
"""
Distribuição de notícias por dias [1,31] entre [2010,2015]
para o jornal G1.
"""
quantidade = [row.Dia for index,row in vol_2010_2015_G1.iterrows() if row.Quantidade > 0]
sns.distplot(quantidade, hist=True);
"""
Distribuição de notícias por dias [1,31] entre [2010,2015]
para o jornal ESTADÃO.
"""
quantidade = [row.Dia for index,row in vol_2010_2015_ESTADAO.iterrows() if row.Quantidade > 0]
sns.distplot(quantidade, hist=True);
"""
Distribuição de notícias por dias [1,31] entre [2010,2015]
para o jornal Folha de São Paulo.
"""
quantidade = [row.Dia for index,row in vol_2010_2015_FOLHASP.iterrows() if row.Quantidade > 0]
sns.distplot(quantidade, hist=True);
"""
O objetivo dessa análise é saber se há algum dia da semana [sun,sat]
mais provável para de ocorrem notícias.
"""
volByWeekDay = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticias-DiasDaSemana.csv')
g = sns.factorplot(x="diaDaSemana", y="quantidade", hue="jornal", data=volByWeekDay,
size=6, kind="point", palette="muted", aspect=2)
g.set_ylabels("Quantida de Noticipas Publicadas por Dia")
"""
Bloxplot para distribuição de notícias ao longo dos dia da semana entre [2010,2015]
para o Jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de notícias ao longo dos dias da semana entre [2010,2015]
para o Jornal ESTADÃO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de notícias ao longo dos dias da semana entre entre [2010,2015]
para o Jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Quantidade", y="DiadaSemana", data=vol_2010_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - Para ESTADÃO E FOLHA DE SÃO PAULO, a quarta-feira é o dia com maior quantidade de publicação econômicas.
2 - A partir da quinta-feira há uma menor quantidade de notícias econômicas publicadas.
3 - Para o G1: quinta-feira ~70 notícias
Para o ESTADÃO: quarta-feira ~60 notícias
Para a FOLHA DE SÃO PAULO: quarta-feira ~45 notícias.
4 - Quarta e Quinta feira são dias corriqueiros para os maiores outliers.
"""
"""
Como criar varios histogramas
"""
#volTotal = pd.read_csv('/Users/zegildo/Documents/workspace/PhD/src/scriptPython/volumeTotalGranularidades.csv')
#sns.set(style="darkgrid")
#g = sns.FacetGrid(volTotal, row="DiadaSemana", col="Jornal", margin_titles=True)
#bins = np.linspace(0, 250, 25)
#g.map(plt.hist,"size", color="steelblue", bins=bins, lw=0)
"""
#..............................
#
# 2 - ANÁLISE DE REPERCUSSÕES
#
#..............................
"""
"""
#........................................
#
# 2.1 - Analise de Comentarios
#
# 2.1.1 - Ano a Ano
#........................................
"""
"""
Plota a quantidade de comentarios por Jornal entre 2000 e 2015.
"""
volRepercussao = pd.read_csv(path+'PhD/src/scriptPython/volumeRepercussoes.csv')
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volRepQuantidComentarios = grouped['Comentarios'].agg({'Comentarios' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="Comentarios", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantida de Comentarios Publicadas por Ano")
"""
Quantidade de noticias economicas que receberam comentarios
"""
#vol_2009_2015 = volRepQuantidComentarios[volRepQuantidComentarios.Ano.isin(range(2009,2016))]
vol_2009_2015_G1 = vol_2009_2015[vol_2009_2015.Jornal.isin(["G1"])]
vol_2009_2015_G1_Comentarios = vol_2009_2015_G1[vol_2009_2015_G1.Comentarios > 0]
len(vol_2009_2015_G1_Comentarios.index)
"""
Comentarios:
............
1 - O jornal a FOLHA DE SÃO PAULO é notoriamente o que mais oportuniza ao usuário a possibilidade de emitir comentários.
2 - É possível verificar alguma atividade no jornal ESTADÃO nos anos 2010 e 2014.
3 - Há uma tendência decrescente desde 2011 em relação a esse tipo de iteração com a notícia.
4 - Apesar de permitir comentários em diversas notícias o G1 não apresenta nenhum comentário para notícias econômicas.
Pode ser uma política do jornal ou apenas uma preferência do público.
"""
"""
Bloxplot para distribuição de comentarios ao longo dos dias da semana entre entre [2010,2015]
para o Jornal ESTADAO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_ESTADAO = vol_2009_2015[vol_2009_2015.Jornal.isin(["ESTADAO"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Comentarios", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Comentarios", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
vol_2009_2015_ESTADAO[vol_2009_2015_ESTADAO.Comentarios > 100]
"""
Comentarios:
............
Outliers devem ser observados em 2010 e 2012.
"""
"""
Bloxplot para distribuição de comentarios ao longo dos dias da semana entre entre [2010,2015]
para o Jornal FOLHA DE SAO PAULO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_FOLHASP = vol_2009_2015[vol_2009_2015.Jornal.isin(["FOLHASP"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Comentarios", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Comentarios", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentario:
...........
Outliers 2011 e 2012.
"""
"""
#........................................
#
# 2.1.2 - Analise de Comentarios Mes a Mes
#
#........................................
"""
"""
Plota a quantidade de comentarios por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Mes', 'Jornal'], sort=True)
volRepQuantidComentarios = grouped['Comentarios'].agg({'Comentarios' : np.sum}).reset_index()
volRepQuantidComentarios['Mes'] = pd.Categorical(volRepQuantidComentarios['Mes'],
["JAN", "FEV", "MAR", "ABR", "MAI", "JUN",
"JUL", "AGO","SET", "OUT", "NOV", "DEZ"])
sns.set(style="whitegrid")
g = sns.factorplot(x="Mes", y="Comentarios", hue="Jornal", data=volRepQuantidComentarios.sort(["Mes"]),
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantida de Comentarios Publicadas por Mes")
"""
Bloxplot para distribuição de comentarios ao longo dos meses entre entre [2009,2015]
para o Jornal ESTADAO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_ESTADAO = vol_2009_2015[vol_2009_2015.Jornal.isin(["ESTADAO"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Comentarios", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Comentarios", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de comentarios ao longo dos dias da semana entre entre [2010,2015]
para o Jornal FOLHA DE SAO PAULO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_FOLHASP = vol_2009_2015[vol_2009_2015.Jornal.isin(["FOLHASP"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Comentarios", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Comentarios", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - O mês de SETEMBRO é obviamente o mês com maior quantidade de comentários.
2 - Há uma crescente nos comentários de Março a Agosto.
3 - Para o ESTADÃO há 2 outliers que chamam atenção em MAIO e SETEMBRO.
4 - 75% dos dados do ESTADÃO encontra-se no 0, tanto é que esconde-se as caixas do bloxplot.
5 - Outliers de Setembro e Dezembro chamam atenção.
6 - A mediana para A FOLHA DE SÃO PAULO apresenta pouca variação ao longo dos meses.
"""
"""
#........................................
#
# 2.1.3 - Analise de Comentarios Dia a Dia
#
#........................................
"""
"""
Plota a quantidade de comentarios por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Dia', 'Jornal'])
volRepQuantidComentarios = grouped['Comentarios'].agg({'Comentarios' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Dia", y="Comentarios", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Comentarios Publicadas por Dia")
"""
Bloxplot para distribuição de comentarios ao longo dos dias do mes entre entre [2009,2015]
para o Jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Comentarios", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Comentarios", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Bloxplot para distribuição de comentarios ao longo dos dias do mes entre entre [2009,2015]
para o Jornal FOLHA DE SAO PAULO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Comentarios", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Comentarios", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - Entre [3,9] há uma tendência de queda a quantidade de comentários.
2 - 75% dos dados correspondentes a quantidade de comentários para o jornal ESTADÃO é 0.
3 - Novamente para o jornal FOLHA DE SÃO PAULO encontra-se ~100.
4 - OutLiers para os dias 5 e 20 para o ESTADÃO.
5 - OUTLIERS para os dias 5 e 16 para o jornal FOLHA DE SÃO PAULO.
"""
"""
#.....................................................
#
# 2.1.4 - Analise de Comentarios para os dias da Semana
#
#.....................................................
"""
"""
Plota a quantidade de comentarios por Jornal entre 2000 e 2015 pelo dia da Semana.
"""
grouped = volRepercussao.groupby(['DiadaSemana', 'Jornal'])
volRepQuantidComentarios = grouped['Comentarios'].agg({'Comentarios' : np.sum}).reset_index()
volRepQuantidComentarios['DiadaSemana'] = pd.Categorical(volRepQuantidComentarios['DiadaSemana'],
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"])
sns.set(style="whitegrid")
g = sns.factorplot(x="DiadaSemana", y="Comentarios", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Comentarios Publicadas por dia da Semana")
"""
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Comentarios", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Comentarios", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Comentarios", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Comentarios", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - A quarta-feira é o dia da semana mais provável de haver comentários.
2 - Há uma crescente de segunda a quarta e uma decrescente de quarta a domingo.
"""
"""
#.....................................................
#
# 2.2 - Analise de Tweets
# 2.2.1 - Analise de Tweets Ano a Ano
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via Tweets por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volRepQuantidComentarios = grouped['Tweets'].agg({'Tweets' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="Tweets", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Comentarios Publicadas por dia da Semana")
"""
Comentários:
............
1 - O G1 é o jornal que apresenta maior número de repercussões de suas notícias via Twitter. Tendo em 2014 mais de 1.200.000
repercussões para suas notícias.
2 - A repercussão de notícias do ESTADÃO e FOLHA DE SÃO PAULO utilizando o Twitter apresenta tendências semelhantes de
crescimento desde 2010.
3 - 2014 foi o ano com maior repercussão via Twitter para todos os jornais analisados.
"""
"""
Distruibuição da repercussão via Tweeter entre os anos de 2009 e 2015 pelo jornal
G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Tweets", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Tweets", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Distruibuição da repercussão via Tweeter entre os anos de 2009 e 2015 pelo jornal
Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Tweets", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Tweets", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Distruibuição da repercussão via Tweeter entre os anos de 2009 e 2015 pelo jornal
ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Tweets", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Tweets", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - O jornal G1 apresenta uma mediana de repercussão de suas notícias econômicas ~2000 tweets por notícias.
2 - Durante o ano de 2013 notícias a evolução crescente de repercussão de notícias via twitter é interrompida,
estabilizando em 2014.
3 - Para o jornal ESTADÃO algumas notícias específicas em 2015 já foram mais Twitadas que em em todos os outros anos.
4 - ESTADÃO e FOLHA DE SÃO PAULO apresentam realmente tendência crescente na repercussão de notícias econômicas via Twitter.
"""
"""
2.2.2 - Analise de Tweets Mes a Mes
"""
"""
Plota a manifestações de repercussões via Twitter por Jornal entre os meses do ano.
"""
grouped = volRepercussao.groupby(['Mes', 'Jornal'], sort=True)
volRepQuantidTweets = grouped['Tweets'].agg({'Tweets' : np.sum}).reset_index()
volRepQuantidTweets['Mes'] = pd.Categorical(volRepQuantidTweets['Mes'],
["JAN", "FEV", "MAR", "ABR", "MAI", "JUN",
"JUL", "AGO","SET", "OUT", "NOV", "DEZ"])
sns.set(style="whitegrid")
g = sns.factorplot(x="Mes", y="Tweets", hue="Jornal", data=volRepQuantidTweets.sort(["Mes"]),
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantida de Tweets Publicadas por Mes")
"""
Comentários:
............
1- Assim como a quantidade de notícias, o ESTADÃO E G1 apresentam comportamentos bastante semelhantes:
- Decrescimento de Janeiro a Março.
- Crescimento de Março a Abril.
- Decrescimento de Abril a Junho.
- Crescimento de Julho a Outubro.
- Decrescimento de Outubro a Dezembro
2- O jornal FOLHA DE SÃO PAULO apresenta um comportamento relativamente diferente dos demais jornais, em epecial
ao intervalo que compreende AGOSTO-OUTUBRO onde há um decréscimo para a quantidade de notícias.
"""
"""
Distruibuição da repercussão via Twitter entre os meses pelo jornal
G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Tweets", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Tweets", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Distruibuição da repercussão via Twitter entre os meses pelo jornal
ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Tweets", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Tweets", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Distruibuição da repercussão via Twitter entre os anos de 2009 e 2015 pelo jornal
Folha de Sao Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Tweets", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Tweets", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - O G1 apresenta o mes de Fevereiro como o de maior repercussão de notícias econômicas tendo ~1500 repercussões como índice
de tendência central.
2 - O ESTADÃO apresenta-se bastante volátil para essa mídia. O Índice de tendência central apesar de 0, os 3º quartil atinge
com frequência os ~500 twitters. Sendo responsáveis também por grandes outliers. Em outubro e novembro.
3 - A FOLHA DE SÃO PAULO possui maior mediana no mês de AGOSTO e um outlier expressivo no mês de FEVEREIRO.
"""
"""
2.2.3 - Analise de Tweets Dia a Dia
"""
"""
Plota a manifestações de repercussões via Twitter por Jornal entre os dias do mes.
"""
grouped = volRepercussao.groupby(['Dia', 'Jornal'])
volRepQuantidComentarios = grouped['Tweets'].agg({'Tweets' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Dia", y="Tweets", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Tweets Publicadas por Dia")
"""
Comentários:
............
1 - Entre os dias [5,7] há um decrescimento de repercussões via Twitter para todos os jornais.
2 - Para o G1 o dia 7 e o dia 19 são respectivamente o menos provável e o mais provável de haver repercussão via Twitter
para notícias econômicas.
3 - Em média cada dia do G1 ao longo do tempo recebeu 130.000 repercussões em notícias contra 3.000 do
JORNAL FOLHA DE SÃO PAULO.
4 - É 43X mais provável que uma notícia seja repercutida no Twitter via G1 durante algum dia do mês que nos outros jornais.
"""
"""
Plota a distribuição de tweets ao longo dos dias do mes para o jornal G1
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Tweets", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Tweets", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de tweets ao longo dos dias do mes para o jornal ESTADÃO
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Tweets", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Tweets", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de tweets ao longo dos dias do mes para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Tweets", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Tweets", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
2.2.4 - Analise de Tweets por Dia da Semana
"""
"""
Plota a quantidade de tweets por Jornal entre 2000 e 2015 pelo dia da Semana.
"""
grouped = volRepercussao.groupby(['DiadaSemana', 'Jornal'])
volRepQuantidComentarios = grouped['Tweets'].agg({'Tweets' : np.sum}).reset_index()
volRepQuantidComentarios['DiadaSemana'] = pd.Categorical(volRepQuantidComentarios['DiadaSemana'],
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"])
sns.set(style="whitegrid")
g = sns.factorplot(x="DiadaSemana", y="Tweets", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Tweets Publicadas por dia da Semana")
"""
Comentários:
............
1 - A quantidade de repercussão ao longo da semana é bastante uniforme.
2 - O G1 a partir da quinta-feira possui um declínio de repercussões via Twitter.
3 - Os demais jornais apresentam a partir da sexta-feira.
"""
"""
Plota a distribuição de tweets ao longo dos dias da semana para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de tweets ao longo dos dias da semana para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de tweets ao longo dos dias da semana para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Tweets", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
#.....................................................
#
# 2.3 - Analise de Facebook
# 2.3.1 - Analise de Facebook Ano a Ano
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via Facebook por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volRepQuantidComentarios = grouped['Facebook'].agg({'Facebook' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="Facebook", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Facebook Publicadas por Ano")
"""
Comentários:
............
1 - G1 apresenta uma tendência crescente de repercussão de notícias econômicas via Facebook.
2 - FOLHA DE SÃO PAULO saiu de 1.000.000 de repercussões via Facebook em 2013 para 5.000.000 em 2014.
3 - ESTADÃO apresenta apenas em 2013 alguma manifestação visível tendo amplo crescimento também em 2014.
"""
"""
Plota a distribuição de repercussões via Facebook entre os anos de 2009 e 2015
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Facebook", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Facebook", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os anos de 2009 e 2015
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Facebook", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Facebook", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os anos de 2009 e 2015
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="Facebook", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="Facebook", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - O G1 apresenta 2 outliers com mais de 250.000 repercussões.
2 - A FOLHA DE SÃO PAULO apresenta também em 2014 2 eventos com aproximadamente 500.000 de repercussões.
3 - O ESTADÃO em 2015 apresenta uma repercussão de quase 350.000 de repercussões.
"""
"""
#........................................
#
# 2.3.2 - Analise de Facebook Mes a Mes
#
#........................................
"""
grouped = volRepercussao.groupby(['Mes', 'Jornal'])
volRepQuantidFacebook = grouped['Facebook'].agg({'Facebook' : np.sum}).reset_index()
volRepQuantidFacebook['Mes'] = pd.Categorical(volRepQuantidFacebook['Mes'],
["JAN", "FEV", "MAR", "ABR", "MAI", "JUN",
"JUL", "AGO","SET", "OUT", "NOV", "DEZ"])
sns.set(style="whitegrid")
g = sns.factorplot(x="Mes", y="Facebook", hue="Jornal", data=volRepQuantidFacebook,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Facebook Publicadas por Mes")
"""
Comentários:
............
1 - Tendência de crescimentoentre Junho e Outubro para todos os jornais.
2 - De Outubro a Dezembro há uma tendência decrescente para ESTADÃO E G1.
3 - Diferentes de G1 e ESTADÃO a FOLHA DE SÃO PAULO apresenta vertiginoso crescimento de repercussão de notícias econômicas
via Facebook no ultimo trimestre.
"""
"""
Plota a distribuição de repercussões via Facebook entre meses
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Facebook", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Facebook", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre meses
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Facebook", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Facebook", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os meses
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="Facebook", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="Facebook", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - Outliers aparecem em OUTUBRO para G1 e ESTADÃO com bastante força. É provavel de serem relacionados a notícias referentes
a eleições.
2 - O fenômeno contrário aparece sempre com a FOLHA DE SÃO PAULO como se houvesse um cuidado em ser tímida
ou não se expor durante esse mês sendo, segundo o gráfico, de manifestações mais modestas que os demais.
"""
"""
#........................................
#
# 2.3.3 - Analise de Facebook Dia do Mes
#
#.......................................
"""
grouped = volRepercussao.groupby(['Dia', 'Jornal'])
volRepQuantidFacebook = grouped['Facebook'].agg({'Facebook' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Dia", y="Facebook", hue="Jornal", data=volRepQuantidFacebook,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Facebook Publicadas por Mes")
"""
Comentários:
............
1 - Dia 11 é marcado por um notório crescimento de publicações para todos os jornais.
2 - Entre os dias 19 e 27 o ESTADÃO mantém com o G1 uma similaridade de eventos bastante peculiar.
3 - Todos os jornais decrescem em número de repercussão via Facebook a partir do dia 29.
"""
"""
Plota a distribuição de repercussões via Facebook entre os meses
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Facebook", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Facebook", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os meses
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Facebook", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Facebook", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os meses
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="Facebook", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="Facebook", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
OutLiers. Atenção aos Outliers.
"""
"""
#...............................................
#
# 2.3.4 - Analise de Facebook por Dia da Semana
#
#...............................................
"""
grouped = volRepercussao.groupby(['DiadaSemana', 'Jornal'])
volRepQuantidComentarios = grouped['Facebook'].agg({'Facebook' : np.sum}).reset_index()
volRepQuantidComentarios['DiadaSemana'] = pd.Categorical(volRepQuantidComentarios['DiadaSemana'],
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"])
sns.set(style="whitegrid")
g = sns.factorplot(x="DiadaSemana", y="Facebook", hue="Jornal", data=volRepQuantidComentarios,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de Tweets Publicadas por dia da Semana")
"""
Comentários:
............
1 - Há um decrescimo de repercussão a partir da quinta-feira.
2 - Para o G1 há mais repercussão de notícias econômicas via Facebook no domingo que no sábado.
3 - Há mais similaridade visual entre G1 e ESTADÃO que entre algum desses jornais e a FOLHA DE SÃO PAULO.
"""
"""
Plota a distribuição de repercussões via Facebook entre os dias da semana
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os dias da semana
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via Facebook entre os dias da semana
para o jornal Folha de São Paulo.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="Facebook", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
#.....................................................
#
# 2.4 - Analise de LinkedIn
# 2.4.1 - Analise de LinkedIn Ano a Ano
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via LinkedIn por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volRepQuantidLinkedIn = grouped['LinkedIn'].agg({'LinkedIn' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="LinkedIn", hue="Jornal", data=volRepQuantidLinkedIn,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de LinkedIn Publicadas por Mes")
"""
Comentários:
............
1 - Há uma tendência crescente de divulgação de notícias via LinkedIn por parte da FOLHA DE SÃO PAULO E ESTADÃO.
2 - O jornal FOLHA DE SÃO PAULO já repercutiu via LinkedIn até março de 2015 mais notícias que 2014 inteiro.
3 - O público de leitores do ESTADÃO prefere essa forma de repercutir notícias quanto comparada com os outros jornais.
"""
"""
Plota a distribuição de repercussões via LinkedIn entre os anos de 2009 e 2015
para o jornal G1.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_G1 = vol_2009_2015[vol_2009_2015.Jornal.isin(["G1"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="LinkedIn", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="LinkedIn", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
Em média as notícias econômicas do G1 recebem 50 repercussões via LinkedIn.
"""
"""
Plota a distribuição de repercussões via LinkedIn entre os anos de 2009 e 2015
para o jornal ESTADÃO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_ESTADAO = vol_2009_2015[vol_2009_2015.Jornal.isin(["ESTADAO"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="LinkedIn", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="LinkedIn", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
Mediana 2014 em torno de 60 repercussões.
"""
"""
Plota a distribuição de repercussões via LinkedIn entre os anos de 2009 e 2015
para o jornal FOLHA DE SÃO PAULO.
"""
vol_2009_2015 = volRepercussao[volRepercussao.Ano.isin(range(2009,2016))]
vol_2009_2015_FOLHASP = vol_2009_2015[vol_2009_2015.Jornal.isin(["FOLHASP"])]
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="LinkedIn", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="LinkedIn", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
...........
O ano de 2015 no geral apresenta uma forte tendência de utilização do LinkedIn para propagação de notícias econômicas
para todos os jornais. Grande parte dos outliers já é possível de ser observado nesse ano.
O público que mais utiliza essa mídia é G1 e ESTADAO com tendencia de crescimento constante da FOLHA DE SÃO PAULO.
"""
"""
#.....................................................
#
# 2.4 - Analise de LinkedIn
# 2.4.2 - Analise de LinkedIn Mes a Mes
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via LinkedIn por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Mes', 'Jornal'])
volRepQuantidLinkedIn = grouped['LinkedIn'].agg({'LinkedIn' : np.sum}).reset_index()
volRepQuantidLinkedIn['Mes'] = pd.Categorical(volRepQuantidLinkedIn['Mes'],
["JAN", "FEV", "MAR", "ABR", "MAI", "JUN",
"JUL", "AGO","SET", "OUT", "NOV", "DEZ"])
sns.set(style="whitegrid")
g = sns.factorplot(x="Mes", y="LinkedIn", hue="Jornal", data=volRepQuantidLinkedIn,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de LinkedIn Publicadas por Mes")
"""
Comentários:
............
1 - Maio é o mês de maior repercussão de notícias econômicas do G1 e de dos outros jornais.
2 - Janeiro é o mes onde essa atividade é mais frequente para FOLHASP E ESTADÃO.
3 - Há um forte decrescimento entre MAIO e JULHO para todos os jornais.
4 - O G1 apresentou a maior utilização da mídia enquanto FOLHASP e ESTADAO tiveram utilização bastante semelhante.
"""
"""
Plota a distribuição de repercussões via LinkedIn entre os meses
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="LinkedIn", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="LinkedIn", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os meses
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="LinkedIn", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="LinkedIn", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os meses
para o jornal FOLHASP.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="LinkedIn", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="LinkedIn", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - O G1 possui o público que mais repercute noticias utilizando o LinkedIn.
2 - O ESTADÃO alcançou a maior repercussão utilizando o LinkedIn.
3 - O mês de MAIO é onde ocorre o maior número de repercussões via LinkedIn.
"""
"""
#.....................................................
#
# 2.4 - Analise de LinkedIn
# 2.4.3 - Analise de LinkedIn Dia a Dia
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via LinkedIn por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Dia', 'Jornal'])
volRepQuantidLinkedIn = grouped['LinkedIn'].agg({'LinkedIn' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Dia", y="LinkedIn", hue="Jornal", data=volRepQuantidLinkedIn,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de LinkedIn Publicadas por Dia")
"""
Comentários:
............
Bastante irregularidade para os dias.
"""
"""
Plota a distribuição de repercussões via LinkedIn entre os dias meses
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="LinkedIn", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="LinkedIn", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os meses
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="LinkedIn", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="LinkedIn", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os dias do mes
para o jornal FOLHASP.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="LinkedIn", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="LinkedIn", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
1 - G1 dia 27 é o mais provável de haver maior repercussão via LinkedIn.
2 - Outliers ocorrem em dias diversos.
3 - FOLHA DE SÃO PAULO dia 24 o mais provável de haver maior repercussão via LinkedIn.
4 - Os maiores outliers ocorrem no jornal ESTADAO.
"""
"""
#.....................................................
#
# 2.4 - Analise de LinkedIn
# 2.4.4 - Analise de LinkedIn Dia da Semana
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via LinkedIn por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['DiadaSemana', 'Jornal'])
volRepQuantidLinkedIn = grouped['LinkedIn'].agg({'LinkedIn' : np.sum}).reset_index()
volRepQuantidLinkedIn['DiadaSemana'] = pd.Categorical(volRepQuantidLinkedIn['DiadaSemana'],
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"])
sns.set(style="whitegrid")
g = sns.factorplot(x="DiadaSemana", y="LinkedIn", hue="Jornal", data=volRepQuantidLinkedIn,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de LinkedIn Publicadas por Dia da Semana")
"""
Plota a distribuição de repercussões via LinkedIn entre os dias da semana
para o jornal G1.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="LinkedIn", data=vol_2009_2015_G1,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="LinkedIn", data=vol_2009_2015_G1,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os dias da semana
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="LinkedIn", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="LinkedIn", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Plota a distribuição de repercussões via LinkedIn entre os dias da semana
para o jornal FOLHASP.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="LinkedIn", data=vol_2009_2015_FOLHASP,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="LinkedIn", data=vol_2009_2015_FOLHASP,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
...........
1 - A repercussão de notícias econômicas via LinkedIn para os leitores da FOLHA DE SÃO PAULO é mais intensa aos SÁBADOS.
2 - Para G1 e ESTADÃO há uma diminuição das atividades a partir da quinta-feira.
3 - A segunda-feira é um dia de provavel outlier.
"""
"""
#.....................................................
#
# 2.5 - Analise de Google Plus
# 2.5.1 - Analise do Google Plus Ano a Ano
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via GooglePlus por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volRepQuantidGooglePlus = grouped['GooglePlus'].agg({'GooglePlus' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="GooglePlus", hue="Jornal", data=volRepQuantidGooglePlus,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de GooglePlus Publicadas por Mes")
"""
Comentários:
............
Apenas o ESTADÃO apresenta repercussão de notícias econômicas via GooglePlus.
"""
"""
Plota a distribuição de repercussões via GooglePlus entre os anos 2009 e 2015
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Ano", y="GooglePlus", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Ano", y="GooglePlus", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
#.....................................................
#
# 2.5 - Analise de Google Plus
# 2.5.1 - Analise do Google Plus Mes a Mes
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via GooglePlus por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['Mes', 'Jornal'])
volRepQuantidGooglePlus = grouped['GooglePlus'].agg({'GooglePlus' : np.sum}).reset_index()
volRepQuantidGooglePlus['Mes'] = pd.Categorical(volRepQuantidGooglePlus['Mes'],
["JAN", "FEV", "MAR", "ABR", "MAI", "JUN",
"JUL", "AGO","SET", "OUT", "NOV", "DEZ"])
sns.set(style="whitegrid")
g = sns.factorplot(x="Mes", y="GooglePlus", hue="Jornal", data=volRepQuantidGooglePlus,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de GooglePlus Publicadas por Mes")
"""
Plota a distribuição de repercussões via LinkedIn entre os dias da semana
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Mes", y="GooglePlus", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Mes", y="GooglePlus", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
#.....................................................
#
# 2.5 - Analise de Google Plus
# 2.5.1 - Analise do Google Plus Dia a Dia
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via GooglePlus por Jornal entre meses do ano.
"""
grouped = volRepercussao.groupby(['Dia', 'Jornal'])
volRepQuantidGooglePlus = grouped['GooglePlus'].agg({'GooglePlus' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Dia", y="GooglePlus", hue="Jornal", data=volRepQuantidGooglePlus,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de GooglePlus Publicadas por Dia")
"""
Plota a distribuição de repercussões via GooglePlus entre os dias do mes
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="Dia", y="GooglePlus", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="Dia", y="GooglePlus", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
#.....................................................
#
# 2.5 - Analise de Google Plus
# 2.5.1 - Analise do Google Plus Dia de Semana
#
#.....................................................
"""
"""
Plota a manifestações de repercussões via LinkedIn por Jornal entre 2000 e 2015.
"""
grouped = volRepercussao.groupby(['DiadaSemana', 'Jornal'])
volRepQuantidGooglePlus = grouped['GooglePlus'].agg({'GooglePlus' : np.sum}).reset_index()
volRepQuantidGooglePlus['DiadaSemana'] = pd.Categorical(volRepQuantidGooglePlus['DiadaSemana'],
["Mon", "Tue", "Wed", "Thu", "Fri", "Sat","Sun"])
sns.set(style="whitegrid")
g = sns.factorplot(x="DiadaSemana", y="GooglePlus", hue="Jornal", data=volRepQuantidGooglePlus,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantidade de GooglePlus Publicadas por Dia da Semana")
"""
Plota a distribuição de repercussões via GooglePlus entre os dias da semana
para o jornal ESTADAO.
"""
sns.set(rc={"figure.figsize": (15, 8)},style="ticks", palette="pastel", color_codes=True)
ax = sns.boxplot(x="DiadaSemana", y="GooglePlus", data=vol_2009_2015_ESTADAO,
whis=np.inf, color="c")
# Add in points to show each observation
sns.stripplot(x="DiadaSemana", y="GooglePlus", data=vol_2009_2015_ESTADAO,
jitter=True, size=3, color=".3", linewidth=0)
sns.despine(trim=True)
"""
Comentários:
............
"""
"""
#..............................
#
# 3 - REPERCUSSÃO X NOTICIAS
#
#..............................
"""
"""
Plota a manifestações de repercussões via TotalRepercussao por Jornal entre 2000 e 2015.
"""
volRepercussao = pd.read_csv(path+'/PhD/src/scriptPython/volumeRepercussoes.csv')
grouped = volRepercussao.groupby(['Ano', 'Jornal'])
volTotalRepercusaoAno = grouped['TotalRepercussao'].agg({'TotalRepercussao' : np.sum}).reset_index()
sns.set(style="whitegrid")
g = sns.factorplot(x="Ano", y="TotalRepercussao", hue="Jornal", data=volTotalRepercusaoAno,ci=None,
size=6, kind="point", palette="muted", aspect=2)
# Informação que definirá o eixo Y.
g.set_ylabels("Quantida de Total de Repercussoes promovidas pelo Ano")
"""
Plota a quantidade de notícias pela quantidade de repercussões.
"""
volRepercussao = pd.read_csv(path+'/PhD/src/scriptPython/volumeNoticiasRepercussaoAno.csv',
index_col="Ano")
volRepercussao_G1 = volRepercussao[volRepercussao.Jornal.isin(["G1"])]
volRepercussao_G1 = volRepercussao_G1[["Quantidade","TotalRepercussao"]]
#a = volRepercussao_G1.plot()
#Obtenho duas informações:
# - fig: a figura que será apresentada.
# - host: manipula os eixos é o x,y convencional.
fig,host = plt.subplots()
# Novo eixo Y do lado direito.
novoEiroY = host.twinx()
# Tamanho da Figura
fig.set_size_inches(15, 7, forward=True)
p1, = host.plot(volRepercussao_G1.index, volRepercussao_G1.Quantidade, "k-", label="| Noticias |")
p2, = novoEiroY.plot(volRepercussao_G1.index, volRepercussao_G1.TotalRepercussao, "r--", label="| Repercussao |")
# Estabelece os nomes dos eixos.
host.set_xlabel("Ano")
host.set_ylabel("Quantidade")
novoEiroY.set_ylabel("Repercussao")
# Elimina as linhas (grandes) horizontais.
host.yaxis.grid(False)
novoEiroY.yaxis.grid(False)
# Modofica as cores das legendas.
host.yaxis.label.set_color(p1.get_color())
novoEiroY.yaxis.label.set_color(p2.get_color())
# Modofica as cores e o estilo dos eixos.
tkw = dict(size=4, width=1.5)
host.tick_params(axis='y', colors=p1.get_color(), **tkw)
novoEiroY.tick_params(axis='y', colors=p2.get_color(), **tkw)
# Insere as informacoes sobre legendas.
lines = [p1, p2]
novoEiroY.legend(lines, [l.get_label() for l in lines], bbox_to_anchor=(0.50, 0.99), loc=2, borderaxespad=0.)
plt.show()
"""
Comentários:
............
Para o G1.
1 - Entre 2010 e 2013 é possivel perceber que para um aumento exponencial na quantidade de notícias
há um aumento linear para o número repercussão.
2 - A partir de 2012 percebe-se uma diminuição do número de notícias econômicas publicadas.
3 - A diminuição da quantidade de notícias publicadas é seguida por uma explosão de repercussão para cada notícia.
O que reflete um conhecimento da mídia sobre temas potencialmente repercutíveis.
"""
volRepercussao = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticiasRepercussaoAno.csv',
index_col="Ano")
volRepercussao_FOLHASP = volRepercussao[volRepercussao.Jornal.isin(["FOLHASP"])]
volRepercussao_FOLHASP = volRepercussao_FOLHASP[["Quantidade","TotalRepercussao"]]
#a = volRepercussao_G1.plot()
#Obtenho duas informações:
# - fig: a figura que será apresentada.
# - host: manipula os eixos é o x,y convencional.
fig,host = plt.subplots()
# Novo eixo Y do lado direito.
novoEiroY = host.twinx()
# Tamanho da Figura
fig.set_size_inches(15, 7, forward=True)
p1, = host.plot(volRepercussao_FOLHASP.index, volRepercussao_FOLHASP.Quantidade, "k-", label="| Noticias |")
p2, = novoEiroY.plot(volRepercussao_FOLHASP.index, volRepercussao_FOLHASP.TotalRepercussao, "r--", label="| Repercussao |")
# Estabelece os nomes dos eixos.
host.set_xlabel("Ano")
host.set_ylabel("Quantidade")
novoEiroY.set_ylabel("Repercussao")
# Elimina as linhas (grandes) horizontais.
host.yaxis.grid(False)
novoEiroY.yaxis.grid(False)
# Modofica as cores das legendas.
host.yaxis.label.set_color(p1.get_color())
novoEiroY.yaxis.label.set_color(p2.get_color())
# Modofica as cores e o estilo dos eixos.
tkw = dict(size=4, width=1.5)
host.tick_params(axis='y', colors=p1.get_color(), **tkw)
novoEiroY.tick_params(axis='y', colors=p2.get_color(), **tkw)
# Insere as informacoes sobre legendas.
lines = [p1, p2]
novoEiroY.legend(lines, [l.get_label() for l in lines], bbox_to_anchor=(0.50, 0.99), loc=2, borderaxespad=0.)
plt.show()
"""
Comentários:
............
Para a FOLHA DE SÃO PAULO.
1 - Entre 2009 e 2011 há uma diminuição na quantidade no número de publicações em contra partida
isso é refletida por um aumento da repercussão.
2 - Entre 2012 e 2013 o aumento da quantidade de publicações reflete em uma diminuição
da quantidade de repercussão.
3 - Entre 2013 e 2014 a diminuição da quantidade de publicações reflete novamente
no aumento da quantidade de repercussão.
"""
import seaborn as sns
volRepercussao = pd.read_csv(path+'PhD/src/scriptPython/volumeNoticiasRepercussaoAno.csv',
index_col="Ano")
volRepercussao_ESTADAO = volRepercussao[volRepercussao.Jornal.isin(["ESTADAO"])]
volRepercussao_ESTADAO = volRepercussao_ESTADAO[["Quantidade","TotalRepercussao"]]
#a = volRepercussao_G1.plot()
#Obtenho duas informações:
# - fig: a figura que será apresentada.
# - host: manipula os eixos é o x,y convencional.
fig,host = plt.subplots()
# Novo eixo Y do lado direito.
novoEiroY = host.twinx()
# Tamanho da Figura
fig.set_size_inches(15, 7, forward=True)
p1, = host.plot(volRepercussao_ESTADAO.index, volRepercussao_ESTADAO.Quantidade, "k-", label="| Noticias |")
p2, = novoEiroY.plot(volRepercussao_ESTADAO.index, volRepercussao_ESTADAO.TotalRepercussao, "r--", label="| Repercussao |")
# Estabelece os nomes dos eixos.
host.set_xlabel("Ano")
host.set_ylabel("Quantidade")
novoEiroY.set_ylabel("Repercussao")
# Elimina as linhas (grandes) horizontais.
host.yaxis.grid(False)
novoEiroY.yaxis.grid(False)
# Modofica as cores das legendas.
host.yaxis.label.set_color(p1.get_color())
novoEiroY.yaxis.label.set_color(p2.get_color())
# Modofica as cores e o estilo dos eixos.
tkw = dict(size=4, width=1.5)
host.tick_params(axis='y', colors=p1.get_color(), **tkw)
novoEiroY.tick_params(axis='y', colors=p2.get_color(), **tkw)
# Insere as informacoes sobre legendas.
lines = [p1, p2]
novoEiroY.legend(lines, [l.get_label() for l in lines], bbox_to_anchor=(0.50, 0.99), loc=2, borderaxespad=0.)
plt.show()
"""
Comentários:
............
Para o jornal ESTADÃO.
1 - Entre 2011 e 2013 a quantidade do número de notícias decresce enquanto a quantidade de repercussões aumenta.
2 - De maneira inversa, entre 2013 e 2014 a quantidade de notícias aumenta, a quantidade de repercussão diminui.
"""
"""
#..............................
#
# 4 - ANÁLISE DE POLARIDADE
#
#..............................
"""
"""
3. Análise de Polaridade
Aplicamos o algoritmo vader para toda a base de dados
http://comp.social.gatech.edu/papers/icwsm14.vader.hutto.pdf
Se saiu melhor acertando 73% da amostra de 170 itens classificados manualmente.
"""
"""
Quantifica a polaridade ao longo dos anos
"""
import vincent
vincent.core.initialize_notebook()
volPolaridade = pd.read_csv(path+'PhD/src/scriptsPython/noticiasPolaridade.csv')
grouped = volPolaridade.groupby(['Ano'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
qtPolaridades = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(qtPolaridades)
stack.axis_titles(x='Ano', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Comentários:
............
Para dos os jornais analisados, a quantidade de notícias positvas é ~3.5x a quantidade de notícias negativas.
"""
"""
Plota a quantidade notícias de mesma polaridade por mes.
"""
volPolaridade = pd.read_csv(path+'PhD/src/scriptsPython/noticiasPolaridade.csv')
grouped = volPolaridade.groupby(['Mes'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
qtPolaridades = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(qtPolaridades)
stack.axis_titles(x='Mes', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Plota a quantidade notícias de mesma polaridade por dia do mes.
"""
volPolaridade = pd.read_csv(path+'PhD/src/scriptsPython/noticiasPolaridade.csv')
grouped = volPolaridade.groupby(['Dia'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
qtPolaridades = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(qtPolaridades)
stack.axis_titles(x='Dia', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Plota a quantidade notícias de mesma polaridade por dia da semana.
"""
volPolaridade = pd.read_csv(path+'PhD/src/scriptsPython/noticiasPolaridade.csv')
grouped = volPolaridade.groupby(['DiadaSemana'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
qtPolaridades = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(qtPolaridades)
stack.axis_titles(x='DiadaSemana', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Plota a quantidade de noticias entre 2000 e 2015 para a FOLHA DE SAO PAULO.
"""
volPolaridade_FOLHA = volPolaridade[volPolaridade.Jornal.isin(['FOLHASP'])]
grouped = volPolaridade_FOLHA.groupby(['Ano'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
qtPolaridades_FOLHA = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(qtPolaridades_FOLHA)
stack.axis_titles(x='Ano', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Plota a quantidade de noticias negativoas entre 2000 e 2015 para o G1.
"""
volPolaridade_G1 = volPolaridade[volPolaridade.Jornal.isin(['G1'])]
grouped = volPolaridade_G1.groupby(['Ano'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
volPolaridade_G1 = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(volPolaridade_G1)
stack.axis_titles(x='Ano', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
Plota a quantidade de notícias classificadas como neutras entre 2000 e 2015 para todos os jornais.
"""
volPolaridade_ESTADAO = volPolaridade[volPolaridade.Jornal.isin(['ESTADAO'])]
grouped = volPolaridade_ESTADAO.groupby(['Ano'])
volPolQuantidPos = grouped['pos'].agg({'pos' : np.sum})
volPolQuantidNeg = grouped['neg'].agg({'neg' : np.sum})
volPolQuantidNeu = grouped['neu'].agg({'neu' : np.sum})
volPolaridade_ESTADAO = pd.concat([volPolQuantidPos,volPolQuantidNeg,volPolQuantidNeu], axis=1, ignore_index=False)
stack = vincent.StackedBar(volPolaridade_ESTADAO)
stack.axis_titles(x='Ano', y='')
stack.legend(title='Polaridades')
stack.scales['x'].padding = 0.2
stack.colors(brew='Pastel1')
"""
A grande quantidade de notícias é possível extrair polaridade. Em média apenas 10% das notícias são neutras.
O que pode influenciar o leitor a tomar partido no mercado acionário.
"""
"""
#..............................
#
# 5 - ANÁLISE DE OUTLIERS
#
#..............................
"""
"""
5.1 - Análise de Outliers para repercussão via Comentários.
"""
"""
5.1.1 - Análise de Outliers para repercussão via Comentários FOLHA DE SAO PAULO.
"""
folhaTitulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/comentarios/termosComentariosOutliersFOLHASP-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
folhaConteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/comentarios/termosComentariosOutliersFOLHASP-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título Folha"
print "----------"
print folhaTitulo.head(15)
print "----------"
print "Conteúdo Folha"
print "----------"
print folhaConteudo.head(15)
"""
Geracao de tag could. Nao parece ser uma boa apresentacao.
"""
#from os import path
#from wordcloud import WordCloud
#text = ""
#for row_index, row in folhaConteudo.iterrows():
# if (row_index < 15):
# text += row.frequencia * (row.palavra+" ")
# else:
# break
#wc = WordCloud(max_font_size=90)
#wc.generate(text)
# take relative word frequencies into account, lower max_font_size
#plt.figure()
#plt.imshow(wc)
#plt.axis("off")
#plt.show()
"""
5.1.2 - Análise de Outliers para repercussão via Comentários ESTADAO.
"""
estadaoTitulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/comentarios/termosComentariosOutliersESTADAO-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
estadaoConteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/comentarios/termosComentariosOutliersESTADAO-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título ESTADAO"
print "----------"
print estadaoTitulo.head(15)
print "----------"
print "Conteúdo ESTADAO"
print "----------"
print estadaoConteudo.head(15)
"""
5.1.3 - Análise de Outliers para repercussão via Comentários G1. - NAO hÁ.
"""
"""
5.2 - Análise de Outliers para repercussão via Twitter.
"""
"""
5.2.1 - Análise de Outliers para repercussão via Twitter para Folha de Sao Paulo.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersFOLHASP-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersFOLHASP-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título FOLHA SAO PAULO"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo FOLHA SAO PAULO"
print "----------"
print conteudo.head(15)
"""
5.2.2 - Análise de Outliers para repercussão via Twitter ESTADAO.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersESTADAO-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersESTADAO-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título ESTADAO"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo ESTADAO"
print "----------"
print conteudo.head(15)
"""
5.2.3 - Análise de Outliers para repercussão via Twitter G1.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersG1-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/twitters/termosTwitterOutliersG1-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título G1"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo G1"
print "----------"
print conteudo.head(15)
"""
5.3 - Análise de Outliers para repercussão via Facebook.
"""
"""
5.3.1 - Análise de Outliers para repercussão via Facebook para FOLHA SP.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersFOLHASP-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersFOLHASP-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título FOLHASP"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo FOLHASP"
print "----------"
print conteudo.head(15)
"""
5.3.2 - Análise de Outliers para repercussão via Facebook para ESTADAO.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersESTADAO-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersESTADAO-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título ESTADAO"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo ESTADAO"
print "----------"
print conteudo.head(15)
"""
5.3.3 - Análise de Outliers para repercussão via Facebook para G1.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersG1-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/facebook/termosFacebookOutliersG1-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título G1"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo G1"
print "----------"
print conteudo.head(15)
"""
5.4 - Análise de Outliers para repercussão via LinkedIn.
"""
"""
5.4.1 - Análise de Outliers para repercussão via LinkedIn para G1.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersG1-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersG1-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título G1"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo G1"
print "----------"
print conteudo.head(15)
"""
5.4.2 - Análise de Outliers para repercussão via LinkedIn para ESTADAO.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersESTADAO-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersESTADAO-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título ESTADAO"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo ESTADAO"
print "----------"
print conteudo.head(15)
"""
5.4.3 - Análise de Outliers para repercussão via LinkedIn para FOLHA DE SAO PAULO.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersFOLHASP-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/linkedIn/termosLinkedInOutliersFOLHASP-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título FOLHASP"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo FOLHASP"
print "----------"
print conteudo.head(15)
"""
5.5 - Análise de Outliers para repercussão via GooglePlus.
"""
"""
5.4.1 - Análise de Outliers para repercussão via GooglePlus para ESTADAO.
"""
titulo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/gplus/termoGooglePlusDiasOutliersESTADAO-titulo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
conteudo = pd.read_csv(path+'PhD/src/scriptsMongo/outliers/gplus/termosGooglePlusDiasOutliersESTADAO-conteudo.txt',
sep="\t", names=['palavra', 'frequencia'], header=0)
print "Título ESTADAO"
print "----------"
print titulo.head(15)
print "----------"
print "Conteúdo ESTADAO"
print "----------"
print conteudo.head(15)
"""
#..............................
#
# 6 - ANÁLISE DE CORRELAÇÃO
#
#..............................
"""
"""
6.1 - Análise de Correlação entre QUANTIDADE DE NOTíCIAS e o índice Ibovespa.
"""
ibovespa = pd.read_csv(path+'PhD/src/scriptsPython/correlacao/indices/IndiceIbovespa.csv', index_col='data',
dayfirst=True, parse_dates=True)
ibovespa = ibovespa.reindex(index=ibovespa.index[::-1])
volRepercussao = pd.read_csv(path+'PhD/src/scriptsPython/correlacao/repercussao/noticiasRepercussaoGeralData.csv',
index_col='Data',
dayfirst=True, parse_dates=True)
volRepercussaoPorJornal = pd.read_csv(path+'PhD/src/scriptsPython/correlacao/repercussao/noticiasRepercussaoData.csv',
index_col='Data',
dayfirst=True, parse_dates=True)
qtNoticias = volRepercussao[volRepercussao.index.isin(ibovespa.index)]
qtNoticiasPorJornal = volRepercussaoPorJornal[volRepercussaoPorJornal.index.isin(ibovespa.index)]
print qtNoticias.index.values
print qtNoticiasPorJornal.index.values
print ibovespa.index.values
"""
6.1.1 - Análise de Correlação entre QUANTIDADE DE NOTíCIAS e o índice Ibovespa com todos os dados.
"""
serieIbovespaPreco = Series(ibovespa.preco, index=ibovespa.index)
serieQtNoticias = Series(qtNoticias.Quantidade, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtNoticias' : serieQtNoticias})
df.ibovespa.plot()
df.qtNoticias.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Quantidade': qtNoticias.Quantidade})
g = sns.jointplot(x="preco", y="Quantidade", data=df, size=12)
z,pval = mstats.normaltest(ibovespa.preco)
if(pval < 0.055):
print "Not normal distribution"
z,pval = mstats.normaltest(qtNoticias.Quantidade)
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.Quantidade)
print tau
print p_value
"""
6.1.2 - Análise de Correlação entre QUANTIDADE DE NOTíCIAS DO G1 e o índice Ibovespa .
"""
qtNoticiasPorJornal_G1 = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['G1'])]
serieQtNoticias = Series(qtNoticiasPorJornal_G1.Quantidade, index=qtNoticiasPorJornal_G1.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtNoticias' : serieQtNoticias['2010':'2015']})
df.ibovespa.plot()
df.qtNoticias.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'qtdNoticiasG1': qtNoticiasPorJornal_G1.Quantidade['2010':'2015']})
g = sns.jointplot(x="preco", y="qtdNoticiasG1", data=df, size=12)
z,pval = mstats.normaltest(ibovespa.preco['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
z,pval = mstats.normaltest(qtNoticiasPorJornal_G1.Quantidade['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print pval
print z
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_G1.Quantidade['2010':'2015'])
print tau
print p_value
"""
6.1.3 - Análise de Correlação entre QUANTIDADE DE NOTíCIAS DA FOLHA e o índice Ibovespa .
"""
qtNoticiasPorJornal_FOLHA = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['FOLHASP'])]
serieQtNoticias = Series(qtNoticiasPorJornal_FOLHA.Quantidade, index=qtNoticiasPorJornal_FOLHA.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtNoticias' : serieQtNoticias['2010':'2015']})
df.ibovespa.plot()
df.qtNoticias.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'qtdNoticiasFOLHA': qtNoticiasPorJornal_FOLHA.Quantidade['2010':'2015']})
g = sns.jointplot(x="preco", y="qtdNoticiasFOLHA", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_FOLHA.Quantidade['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print pval
print z
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_FOLHA.Quantidade['2010':'2015'])
print tau
print p_value
"""
6.1.4 - Análise de Correlação entre QUANTIDADE DE NOTíCIAS DO ESTADAO e o índice Ibovespa .
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtNoticias = Series(qtNoticiasPorJornal_ESTADAO.Quantidade, index=qtNoticiasPorJornal_ESTADAO.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtNoticias' : serieQtNoticias['2010':'2015']})
df.ibovespa.plot()
df.qtNoticias.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'qtdNoticiasESTADAO': qtNoticiasPorJornal_ESTADAO.Quantidade['2010':'2015']})
g = sns.jointplot(x="preco", y="qtdNoticiasESTADAO", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.Quantidade['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print pval
print z
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.Quantidade['2010':'2015'])
print tau
print p_value
"""
6.2 - Análise de Correlação entre QUANTIDADE DE COMENTARIOS e o índice Ibovespa.
"""
"""
6.2.1 - Análise de Correlação entre QUANTIDADE DE COMENTARIOS e o índice Ibovespa para todos os pontos
em que ocorreram bolsa excetuando-se, por obvio, sabados e domingos.
"""
serieQtComentarios = Series(qtNoticias.Comentarios, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtComentarios' : serieQtComentarios})
df.ibovespa.plot()
df.qtComentarios.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Comentarios': qtNoticias.Comentarios})
g = sns.jointplot(x="preco", y="Comentarios", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.Comentarios)
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.Comentarios)
print tau
print p_value
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtComentarios' : serieQtComentarios['2010':'2015']})
df.ibovespa.plot()
df.qtComentarios.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Comentarios': qtNoticias.Comentarios['2010':'2015']})
g = sns.jointplot(x="preco", y="Comentarios", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.Comentarios['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticias.Comentarios['2010':'2015'])
print tau
print p_value
"""
6.2.2 - Análise de Correlação entre QUANTIDADE DE COMENTARIOS DO G1 e o índice Ibovespa para todos os pontos
em que ocorreram bolsa excetuando-se, por obvio, sabados e domingos.
"""
qtNoticiasPorJornal_G1 = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['G1'])]
serieQtNoticias = Series(qtNoticiasPorJornal_G1.Comentarios, index=qtNoticiasPorJornal_G1.Comentarios.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtComentariosG1' : serieQtNoticias['2010':'2015']})
df.ibovespa.plot()
df.qtComentariosG1.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'ComentariosG1': qtNoticiasPorJornal_G1.Comentarios['2010':'2015']})
g = sns.jointplot(x="preco", y="ComentariosG1", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_G1.Comentarios['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print z,pval
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_G1.Comentarios['2010':'2015'])
print tau
print p_value
"""
6.2.3 - Análise de Correlação entre QUANTIDADE DE COMENTARIOS DA FOLHA e o índice Ibovespa para todos os pontos
em que ocorreram bolsa excetuando-se, por obvio, sabados e domingos.
"""
qtNoticiasPorJornal_FOLHA = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['FOLHASP'])]
serieQtComentariosFolha = Series(qtNoticiasPorJornal_FOLHA.Comentarios, index=qtNoticiasPorJornal_FOLHA.Comentarios.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtComentariosFOLHA' : serieQtComentariosFolha['2010':'2015']})
df.ibovespa.plot()
df.qtComentariosFOLHA.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'ComentariosFOLHA': qtNoticiasPorJornal_FOLHA.Comentarios['2010':'2015']})
g = sns.jointplot(x="preco", y="ComentariosFOLHA", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_FOLHA.Comentarios['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print z,pval
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_FOLHA.Comentarios['2010':'2015'])
print tau
print p_value
"""
6.2.4 - Análise de Correlação entre QUANTIDADE DE COMENTARIOS DO ESTADAO e o índice Ibovespa para todos os pontos
em que ocorreram bolsa excetuando-se, por obvio, sabados e domingos.
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtComentariosESTADAO = Series(qtNoticiasPorJornal_ESTADAO.Comentarios,
index=qtNoticiasPorJornal_ESTADAO.Comentarios.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtComentariosESTADAO' : serieQtComentariosESTADAO['2010':'2015']})
df.ibovespa.plot()
df.qtComentariosESTADAO.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'ComentariosESTADAO': qtNoticiasPorJornal_ESTADAO.Comentarios['2010':'2015']})
g = sns.jointplot(x="preco", y="ComentariosESTADAO", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.Comentarios['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
else:
print z,pval
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.Comentarios['2010':'2015'])
print tau
print p_value
"""
6.3 - Análise de Correlação entre QUANTIDADE DE Twetter e o índice Ibovespa.
"""
"""
6.3.1 - Análise de Correlação entre QUANTIDADE DE Twetter e o índice Ibovespa para todas as informacoes
"""
serieQtTweets = Series(qtNoticias.Tweets, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qTweets' : serieQtTweets})
df.ibovespa.plot()
df.qTweets.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Tweets': qtNoticias.Tweets})
g = sns.jointplot(x="preco", y="Tweets", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.Tweets)
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.Tweets)
print tau
print p_value
"""
6.3.2 - Análise de Correlação entre QUANTIDADE DE Twitter G1 e o índice Ibovespa.
"""
qtNoticiasPorJornal_G1 = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['G1'])]
serieQtTweets_G1 = Series(qtNoticiasPorJornal_G1.Tweets, index=qtNoticiasPorJornal_G1.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qTweets_G1' : serieQtTweets_G1['2010':'2015']})
df.ibovespa.plot()
df.qTweets_G1.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Tweets': qtNoticiasPorJornal_G1.Tweets['2010':'2015']})
g = sns.jointplot(x="preco", y="Tweets", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_G1.Tweets['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_G1.Tweets['2010':'2015'])
print tau
print p_value
"""
6.3.3 - Análise de Correlação entre QUANTIDADE DE Twitter FOLHA e o índice Ibovespa.
"""
qtNoticiasPorJornal_FOLHA = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['FOLHASP'])]
serieQtTweets_FOLHA = Series(qtNoticiasPorJornal_FOLHA.Tweets, index=qtNoticiasPorJornal_FOLHA.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qTweets_FOLHA' : serieQtTweets_FOLHA['2010':'2015']})
df.ibovespa.plot()
df.qTweets_FOLHA.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Tweets': qtNoticiasPorJornal_FOLHA.Tweets['2010':'2015']})
g = sns.jointplot(x="preco", y="Tweets", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_FOLHA.Tweets['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_FOLHA.Tweets['2010':'2015'])
print tau
print p_value
"""
6.3.4 - Análise de Correlação entre QUANTIDADE DE Twitter ESTADAO e o índice Ibovespa.
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtTweets_ESTADAO = Series(qtNoticiasPorJornal_ESTADAO.Tweets, index=qtNoticiasPorJornal_ESTADAO.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qTweets_ESTADAO' : serieQtTweets_ESTADAO['2010':'2015']})
df.ibovespa.plot()
df.qTweets_ESTADAO.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Tweets': qtNoticiasPorJornal_ESTADAO.Tweets['2010':'2015']})
g = sns.jointplot(x="preco", y="Tweets", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.Tweets['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.Tweets['2010':'2015'])
print tau
print p_value
"""
6.4 - Análise de Correlação entre QUANTIDADE DE Facebook e o índice Ibovespa.
"""
"""
6.4.1 - Análise de Correlação entre QUANTIDADE DE Facebook e o índice Ibovespa para todas as informacoes
"""
serieQtFacebook = Series(qtNoticias.Facebook, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtFacebook' : serieQtFacebook})
df.ibovespa.plot()
df.qtFacebook.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Facebook': qtNoticias.Facebook})
g = sns.jointplot(x="preco", y="Facebook", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.Facebook)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.Facebook)
print tau
print p_value
"""
6.4.2 - Análise de Correlação entre QUANTIDADE DE Facebook G1 e o índice Ibovespa.
"""
qtNoticiasPorJornal_G1 = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['G1'])]
serieQtFacebook_G1 = Series(qtNoticiasPorJornal_G1.Facebook, index=qtNoticiasPorJornal_G1.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qFacebook_G1' : serieQtFacebook_G1['2010':'2015']})
df.ibovespa.plot()
df.qFacebook_G1.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Facebook_G1': qtNoticiasPorJornal_G1.Facebook['2010':'2015']})
g = sns.jointplot(x="preco", y="Facebook_G1", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_G1.Facebook['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticias.Facebook['2010':'2015'])
print tau
print p_value
"""
6.4.3 - Análise de Correlação entre QUANTIDADE DE Facebook FOLHA e o índice Ibovespa.
"""
qtNoticiasPorJornal_FOLHA = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['FOLHASP'])]
serieQtFacebook_FOLHA = Series(qtNoticiasPorJornal_FOLHA.Facebook, index=qtNoticiasPorJornal_FOLHA.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qFacebook_FOLHA' : serieQtFacebook_FOLHA['2010':'2015']})
df.ibovespa.plot()
df.qFacebook_FOLHA.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'Facebook_FOLHA': qtNoticiasPorJornal_FOLHA.Facebook['2010':'2015']})
g = sns.jointplot(x="preco", y="Facebook_FOLHA", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_FOLHA.Facebook['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_FOLHA.Facebook['2010':'2015'])
print tau
print p_value
"""
6.4.4 - Análise de Correlação entre QUANTIDADE DE Facebook ESTADAO e o índice Ibovespa.
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtFacebook_ESTADAO = Series(qtNoticiasPorJornal_ESTADAO.Facebook, index=qtNoticiasPorJornal_ESTADAO.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qFacebook_FOLHA' : serieQtFacebook_ESTADAO['2010':'2015']})
df.ibovespa.plot()
df.qFacebook_FOLHA.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'Facebook_ESTADAO': qtNoticiasPorJornal_ESTADAO.Facebook['2010':'2015']})
g = sns.jointplot(x="preco", y="Facebook_ESTADAO", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.Facebook['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.Facebook['2010':'2015'])
print tau
print p_value
"""
6.5 - Análise de Correlação entre QUANTIDADE DE LinkedIn e o índice Ibovespa.
"""
"""
6.5.1 - Análise de Correlação entre QUANTIDADE DE LinkedIn e o índice Ibovespa para todas as informacoes
"""
serieQtLinkedIn = Series(qtNoticias.LinkedIn, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtLinkedIn' : serieQtLinkedIn})
df.ibovespa.plot()
df.qtLinkedIn.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'LinkedIn': qtNoticias.LinkedIn})
g = sns.jointplot(x="preco", y="LinkedIn", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.LinkedIn)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.LinkedIn)
print tau
print p_value
"""
6.5.2 - Análise de Correlação entre QUANTIDADE DE LinkedIn G1 e o índice Ibovespa.
"""
qtNoticiasPorJornal_G1 = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['G1'])]
serieQtLinkedIn_G1 = Series(qtNoticiasPorJornal_G1.LinkedIn, index=qtNoticiasPorJornal_G1.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qLinkedIn_G1' : serieQtLinkedIn_G1['2010':'2015']})
df.ibovespa.plot()
df.qLinkedIn_G1.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'LinkedIn_G1': qtNoticiasPorJornal_G1.LinkedIn['2010':'2015']})
g = sns.jointplot(x="preco", y="LinkedIn_G1", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_G1.LinkedIn['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_G1.LinkedIn['2010':'2015'])
print tau
print p_value
"""
6.5.3 - Análise de Correlação entre QUANTIDADE DE LinkedIn FOLHA e o índice Ibovespa.
"""
qtNoticiasPorJornal_FOLHA = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['FOLHASP'])]
serieQtLinkedIn_FOLHA = Series(qtNoticiasPorJornal_FOLHA.LinkedIn, index=qtNoticiasPorJornal_FOLHA.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qLinkedIn_FOLHA' : serieQtLinkedIn_FOLHA['2010':'2015']})
df.ibovespa.plot()
df.qLinkedIn_FOLHA.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'LinkedIn_FOLHA': qtNoticiasPorJornal_FOLHA.LinkedIn['2010':'2015']})
g = sns.jointplot(x="preco", y="LinkedIn_FOLHA", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_FOLHA.LinkedIn['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_FOLHA.LinkedIn['2010':'2015'])
print tau
print p_value
"""
6.5.4 - Análise de Correlação entre QUANTIDADE DE LinkedIn ESTADAO e o índice Ibovespa.
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtLinkedIn_ESTADAO = Series(qtNoticiasPorJornal_ESTADAO.LinkedIn, index=qtNoticiasPorJornal_ESTADAO.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qLinkedIn_ESTADAO' : serieQtLinkedIn_ESTADAO['2010':'2015']})
df.ibovespa.plot()
df.qLinkedIn_ESTADAO.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'LinkedIn_ESTADAO': qtNoticiasPorJornal_ESTADAO.LinkedIn['2010':'2015']})
g = sns.jointplot(x="preco", y="LinkedIn_ESTADAO", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.LinkedIn['2010':'2015'])
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.LinkedIn['2010':'2015'])
print tau
print p_value
"""
6.6 - Análise de Correlação entre QUANTIDADE DE GooglePlus e o índice Ibovespa.
"""
"""
6.6.1 - Análise de Correlação entre QUANTIDADE DE GooglePlus e o índice Ibovespa para todas as informacoes.
"""
serieQtGooglePlus = Series(qtNoticias.GooglePlus, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtGooglePlus' : serieQtGooglePlus})
df.ibovespa.plot()
df.qtGooglePlus.plot(secondary_y=True, style='g', figsize=(15, 7))
import seaborn as sns;
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'GooglePlus': qtNoticias.GooglePlus})
g = sns.jointplot(x="preco", y="GooglePlus", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.GooglePlus)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.GooglePlus)
print tau
print p_value
serieQtGooglePlus = Series(qtNoticias.GooglePlus['2010':'2015'], index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'], 'qtGooglePlus' : serieQtGooglePlus['2010':'2015']})
df.ibovespa.plot()
df.qtGooglePlus.plot(secondary_y=True, style='g', figsize=(15, 7))
import seaborn as sns;
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'GooglePlus': qtNoticias.GooglePlus['2010':'2015']})
g = sns.jointplot(x="preco", y="GooglePlus", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.GooglePlus['2010':'2015'])
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticias.GooglePlus['2010':'2015'])
print tau
print p_value
"""
6.6.2 - Análise de Correlação entre QUANTIDADE DE GooglePlus ESTADAO e o índice Ibovespa.
"""
qtNoticiasPorJornal_ESTADAO = qtNoticiasPorJornal[qtNoticiasPorJornal.Jornal.isin(['ESTADAO'])]
serieQtGooglePlus_ESTADAO = Series(qtNoticiasPorJornal_ESTADAO.GooglePlus, index=qtNoticiasPorJornal_ESTADAO.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtGooglePlus_ESTADAO' : serieQtGooglePlus_ESTADAO['2010':'2015']})
df.ibovespa.plot()
df.qtGooglePlus_ESTADAO.plot(secondary_y=True, style='g', figsize=(15, 7))
import seaborn as sns;
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'GooglePlus': qtNoticias.GooglePlus['2010':'2015']})
g = sns.jointplot(x="preco", y="GooglePlus", data=df, size=12)
z,pval = mstats.normaltest(qtNoticiasPorJornal_ESTADAO.GooglePlus['2010':'2015'])
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtNoticiasPorJornal_ESTADAO.GooglePlus['2010':'2015'])
print tau
print p_value
"""
6.7 - Análise de Correlação entre QUANTIDADE DE TotalRepercussao e o índice Ibovespa.
"""
serieQtTotalRepercussao = Series(qtNoticias.TotalRepercussao, index=qtNoticias.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtTotalRepercussao' : serieQtTotalRepercussao})
df.ibovespa.plot()
df.qtTotalRepercussao.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'totalRepercussao': qtNoticias.TotalRepercussao})
g = sns.jointplot(x="preco", y="totalRepercussao", data=df, size=12)
z,pval = mstats.normaltest(qtNoticias.TotalRepercussao)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtNoticias.TotalRepercussao)
print tau
print p_value
"""
6.8 - Análise entre Correlação e Polaridade
"""
"""
6.8.1 - Análise de Correlação entre QUANTIDADE de noticias positivas e o índice Ibovespa.
"""
ibovespa = pd.read_csv(path+'PhD/src/scriptsPython/correlacao/indices/IndiceIbovespa.csv', index_col='data',
dayfirst=True, parse_dates=True)
ibovespa = ibovespa.reindex(index=ibovespa.index[::-1])
polaridade = pd.read_csv(path+'PhD/src/scriptsPython/correlacao/polaridade/noticiasPolaridadeGeral.csv',
index_col='Data',
dayfirst=True, parse_dates=True)
qtPolaridade = polaridade[polaridade.index.isin(ibovespa.index)]
print qtPolaridade.index.values
print ibovespa.index.values
serieIbovespaPreco = Series(ibovespa.preco, index=ibovespa.index)
serieQtNoticiasPositivas = Series(qtPolaridade.Positivas, index=qtPolaridade.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtNoticiasPositivas' : serieQtNoticiasPositivas})
df.ibovespa.plot()
df.qtNoticiasPositivas.plot(secondary_y=True, style='g', figsize=(15, 7))
import seaborn as sns;
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Noticias Positivas': qtPolaridade.Positivas})
g = sns.jointplot(x="preco", y="Noticias Positivas", data=df, size=12)
z,pval = mstats.normaltest(qtPolaridade.Positivas)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtPolaridade.Positivas)
print tau
print p_value
"""
6.8.2 - Análise de Correlação entre QUANTIDADE de noticias positivas e o índice Ibovespa apenas entre 2010 e 2015.
"""
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtNoticiasPositivas' : serieQtNoticiasPositivas['2010':'2015']})
df.ibovespa.plot()
df.qtNoticiasPositivas.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Noticias Positivas': qtPolaridade.Positivas['2010':'2015']})
g = sns.jointplot(x="preco", y="Noticias Positivas", data=df, size=12)
z,pval = mstats.normaltest(qtPolaridade.Positivas['2010':'2015'])
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtPolaridade.Positivas['2010':'2015'])
print tau
print p_value
"""
6.8.3 - Análise de Correlação entre QUANTIDADE de noticias negativas e o índice Ibovespa.
"""
serieQtNoticiasNegativas = Series(qtPolaridade.Negativas, index=qtPolaridade.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtNoticiasNegativas' : serieQtNoticiasNegativas})
df.ibovespa.plot()
df.qtNoticiasNegativas.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco, 'Noticias Negativas': qtPolaridade.Negativas})
g = sns.jointplot(x="preco", y="Noticias Negativas", data=df, size=12)
z,pval = mstats.normaltest(qtPolaridade.Negativas)
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, qtPolaridade.Negativas)
print tau
print p_value
"""
6.8.4 - Análise de Correlação entre QUANTIDADE de noticias negativas e o índice Ibovespa entre 2010 e 2015.
"""
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtNoticiasNegativas' : serieQtNoticiasNegativas['2010':'2015']})
df.ibovespa.plot()
df.qtNoticiasNegativas.plot(secondary_y=True, style='g', figsize=(15, 7))
sns.set(style="white", color_codes=True)
df = DataFrame({'preco': ibovespa.preco['2010':'2015'], 'Noticias Negativas': qtPolaridade.Negativas['2010':'2015']})
g = sns.jointplot(x="preco", y="Noticias Negativas", data=df, size=12)
z,pval = mstats.normaltest(qtPolaridade.Negativas['2010':'2015'])
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'], qtPolaridade.Negativas['2010':'2015'])
print tau
print p_value
"""
6.8.5 - Análise de Correlação entre a diferença entre notícias positivas e negativas
"""
serieQtNoticiasPos_Neg = Series((qtPolaridade.Positivas - qtPolaridade.Negativas), index=qtPolaridade.index)
df = DataFrame({'ibovespa' : serieIbovespaPreco, 'qtNoticiasPos_Neg' : serieQtNoticiasPos_Neg})
df.ibovespa.plot()
df.qtNoticiasPos_Neg.plot(secondary_y=True, style='g', figsize=(15, 7))
df = DataFrame({'preco': ibovespa.preco, 'Diferenca de Polaridades': (qtPolaridade.Positivas - qtPolaridade.Negativas)})
g = sns.jointplot(x="preco", y="Diferenca de Polaridades", data=df, size=12)
z,pval = mstats.normaltest((qtPolaridade.Positivas - qtPolaridade.Negativas))
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco, (qtPolaridade.Positivas - qtPolaridade.Negativas))
print tau
print p_value
"""
6.8.6 - Análise de Correlação entre a diferença entre notícias positivas e negativas
"""
df = DataFrame({'ibovespa' : serieIbovespaPreco['2010':'2015'],
'qtNoticiasPos_Neg' : serieQtNoticiasPos_Neg['2010':'2015']})
df.ibovespa.plot()
df.qtNoticiasPos_Neg.plot(secondary_y=True, style='g', figsize=(15, 7))
df = DataFrame({'preco': ibovespa.preco['2010':'2015'],
'Diferenca de Polaridades': (qtPolaridade.Positivas - qtPolaridade.Negativas)['2010':'2015']})
g = sns.jointplot(x="preco", y="Diferenca de Polaridades", data=df, size=12)
z,pval = mstats.normaltest((qtPolaridade.Positivas - qtPolaridade.Negativas)['2010':'2015'])
print pval
if(pval < 0.055):
print "Not normal distribution"
tau, p_value = kendalltau(ibovespa.preco['2010':'2015'],
(qtPolaridade.Positivas - qtPolaridade.Negativas)['2010':'2015'])
print tau
print p_value
"""
CONSTRUCAO DE UMA FLORESTA ALEATORIA
"""
todosAtributos = pd.read_csv(path+'PhD/src/scriptsPython/models/noticiaPorNoticia/todosAtributosPorNoticia.csv',
index_col='Data', dayfirst=True, parse_dates=True)
#ibovespa = ibovespa.reindex(index=ibovespa.index[::-1])
ibovespaClasses = pd.read_csv(path+'PhD/src/scriptsPython/indices/ibovespa3Classes.csv',
index_col='Data',
dayfirst=True, parse_dates=True
)
#filtramos as classes de noticias para a partir do primeiro dia que temos o registro do ibove
todosAtributos = todosAtributos.sort_index(ascending=False)
ibovespaClasses = ibovespaClasses.sort_index(ascending=False)
todosAtributos = todosAtributos['2015-03-02':'2005-06-15']
ibovespaClasses = ibovespaClasses['2015-03-02':'2005-06-15']
print ibovespaClasses.head(1)
print todosAtributos.head(1)
print ibovespaClasses.tail(1)
print todosAtributos.tail(1)
#Transformamos a classe jornal em valor para o arquivo ficar menor.
todosAtributos.ix[todosAtributos.Jornal == 'G1', 'Jornal'] = 0
todosAtributos.ix[todosAtributos.Jornal == 'FOLHASP', 'Jornal'] = 1
todosAtributos.ix[todosAtributos.Jornal == 'ESTADAO', 'Jornal'] = 2
todosAtributos.head(10)
ibovespaClasses = ibovespaClasses.sort_index(ascending=True)
ibovespaClasses = ibovespaClasses.reset_index()
ibovespaClasses.head(4)
#
for i in xrange(ibovespaClasses.shape[0]-1):
classeAtual = ibovespaClasses.iloc[i+1].classes
ibovespaClasses.set_value(i,'classes',classeAtual)
#para cada grupo de noticias que ocorreram no mesmo dia do bovespa, recebem o valor da classe do ibove correspondente.
#ibovespaClasses = ibovespaClasses.reset_index()
todosAtributos = todosAtributos.reset_index()
todosAtributos['classes'] = ""
for index, row in ibovespaClasses.iterrows():
todosAtributos.ix[todosAtributos.Data == str(row.Data), 'classes'] = row.classes
todosAtributos.head(5)
#Ordenamos do maior para o menor e dizemos que a classe vazia recebe o valor da ultima classe preenchida antes dela
todosAtributos = todosAtributos.sort_values('Data', ascending=False)
classeAtual = ""
for index, row in todosAtributos.iterrows():
if(todosAtributos.ix[index]['classes'] == ""):
todosAtributos.set_value(index,'classes',classeAtual)
else:
classeAtual = todosAtributos.ix[index]['classes']
todosAtributos.head(5)
#para que todos fiquem ordenados do menor para o maior para começar o treinamento
todosAtributos = todosAtributos.set_index(['Data'])
ibovespaClasses = ibovespaClasses.set_index(['Data'])
todosAtributos = todosAtributos.sort_index(ascending=True)
ibovespaClasses = ibovespaClasses.sort_index(ascending=True)
todosAtributos['2005-06-17':'2005-06-21'].head(5)
todosAtributos.head(5)
ibovespaClasses.head(5)
"""
#
# Criando arvore de decisao.
#
"""
"""
Modelo com Janela baseada em dias de Ibove. A quantidade de treino e teste pode variar a depender de finais de semanas
e feriados.
Treina com uma janela que varia de 0 até 90 e imprimie a janela que proporcionou a melhor acuracia
Nesse modelo o treino compreende o número de janelas não contínuas, mas o número contínuo de dias que houveram ibove.
Ou seja, 3 dias não são 3 dias contínuos podem ser [sexta:terça] compreenddendo o sabado e o domingo dias que não houve ibove.
O treino é realizado entre a janela que compreende o último dia de treino+1 e o próximo dia de ibove -1 dia.
"""
from sklearn import tree
from scipy import stats
from sklearn.metrics import confusion_matrix
melhorAcuraria = 0
melhorJanela = 0
for j in xrange(91):
#Janela é 7, entretando, id começa de 0.
JANELA = j
datasCompletas = todosAtributos.index.unique().tolist()
datasIboves = ibovespaClasses.index.unique()
alvos = []
predicoes = []
#for i in xrange(1):
for i in xrange(len(datasIboves)-JANELA-2):
inicio,fim,teste,alvo = datasIboves[i],datasIboves[i+JANELA],datasIboves[i+JANELA+1],datasIboves[i+JANELA+2]
treino=todosAtributos[inicio:fim]
#print"treinoCompleto",treino
#Quando coloco o .as_matrix garanto que o indece nao participara do treino
t=treino[treino.columns[0:11]]
a=treino['classes']
clf = tree.DecisionTreeClassifier(random_state=99)
clf = clf.fit(t,a)
#teste contem noticias publicadas posteriormente a hora de fechamento do ibovespa
# e anteior a data do proximo dia de ibove
teste = todosAtributos[datasCompletas[datasCompletas.index(fim)+1]:datasCompletas[datasCompletas.index(alvo)-1]]
teste = teste[teste.columns[0:11]]
# prever as cada linha de noticia baseado no aprendizado
classes = clf.predict(teste)
# obtem a moda das classificações das noticias
predicoes.append(stats.mode(classes)[0][0])
# obtem a classificação do dia que quero prever
alvo = todosAtributos[alvo:alvo]
alvo = alvo['classes'][0]
alvos.append(alvo)
result = confusion_matrix(alvos, predicoes)
somaTodosTernos = sum(sum(result))
diagonalPrincipal = sum([result[k][k]for k in xrange(len(result))])
acuracia = float(diagonalPrincipal)/somaTodosTernos
if acuracia > melhorAcuraria:
melhorAcuracia=acuracia
melhorJanela = j
print melhorAcuracia
print melhorJanela
ibovespaClasses[~ibovespaClasses.index.isin(datasCompletas)]
"""
Modelo com janela de treino e teste continua. Janela não irá variar com
Neste modelo o treino é realizado sempre com um numero fixo de janelas. O teste sempre realizado com o dia+1 do treino
para prever o ibove do dia d+2. Fizemos esse procedimento com todos os valores de janelas compreendidos entre 0 e 90
"""
melhorAcuraria = 0
melhorJanela = 0
for j in xrange(91):
print j
janela = j
datasCompletas = todosAtributos.index.unique()
for i in xrange(len(datasIboves)-janela-2):
inicio,fim,teste,alvo = datasCompletas[i],datasCompletas[i+janela],datasCompletas[i+janela+1],datasCompletas[i+janela+2]
treino=todosAtributos[inicio:fim]
#print"treinoCompleto",treino
#Quando coloco o .as_matrix garanto que o indece nao participara do treino
t=treino[treino.columns[0:11]]
a=treino['classes']
clf = tree.DecisionTreeClassifier(random_state=99)
clf = clf.fit(t,a)
#teste contem noticias publicadas posteriormente a hora de fechamento do ibovespa
# e anteior a data do proximo dia de ibove
teste = todosAtributos[teste:teste]
teste = teste[teste.columns[0:11]]
# prever as cada linha de noticia baseado no aprendizado
classes = clf.predict(teste)
# obtem a moda das classificações das noticias
predicoes.append(stats.mode(classes)[0][0])
# obtem a classificação do dia que quero prever
alvo = todosAtributos[alvo:alvo]
alvo = alvo['classes'][0]
alvos.append(alvo)
result = confusion_matrix(alvos, predicoes)
somaTodosTernos = sum(sum(result))
diagonalPrincipal = sum([result[k][k]for k in xrange(len(result))])
acuracia = float(diagonalPrincipal)/somaTodosTernos
if acuracia > melhorAcuraria:
melhorAcuracia=acuracia
melhorJanela = j
print melhorAcuracia
print melhorJanela
"""
Neste modelo o treino é acumulativo. O primeiro treino será realizado com apenas 1 dia,
o segundo com 2 dias o terceiro com 3 dias e assim sucessivamente. O teste sempre realizado com o d+1 após o treino.
"""
from sklearn import tree
from scipy import stats
from sklearn.metrics import confusion_matrix
#janela é 7, entretando, id começa de 0.
alvos = []
predicoes = []
datas = todosAtributos.index.unique()
melhorAcuraria=0
melhorJanela=0
for k in xrange(1,len(datas)-2):
fim,teste,alvo = datas[k],datas[k+1],datas[k+2]
treino=todosAtributos[datas[0]:fim]
#Quando coloco o .as_matrix garanto que o indece nao participara do treino
t=treino[treino.columns[0:11]]
a=treino['classes']
clf = tree.DecisionTreeClassifier(random_state=99)
clf = clf.fit(t,a)
#teste contem noticias publicadas posteriormente a hora de fechamento do ibovespa
# e anteior a data do proximo dia de ibove
teste = todosAtributos[teste:teste]
teste = teste[teste.columns[0:11]]
# prever as cada linha de noticia baseado no aprendizado
classes = clf.predict(teste)
# obtem a moda das classificações das noticias
predicoes.append(stats.mode(classes)[0][0])
# obtem a classificação do dia que quero prever
alvo = todosAtributos[alvo:alvo]
alvo = alvo['classes'][0]
alvos.append(alvo)
result = confusion_matrix(alvos, predicoes)
somaTodosTernos = sum(sum(result))
diagonalPrincipal = sum([result[i][i]for i in xrange(len(result))])
acuracia = float(diagonalPrincipal)/somaTodosTernos
if acuracia > melhorAcuraria:
melhorAcuracia=acuracia
melhorJanela=k
print melhorAcuracia
print melhorJanela
"""
Neste modelo treinamos com 75% dos dados e testamos com os demais utilizando correlacao cruzada.
O objetivo desse modelo é criar uma arvore de decisao e tentar
"""
from sklearn import cross_validation
from IPython.display import Image
from sklearn.externals.six import StringIO
from sklearn import tree
import pydot
train = todosAtributos[todosAtributos.columns[0:11]]
target = todosAtributos['classes']
X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(train, target, test_size=0.25,random_state=0)
rf = tree.DecisionTreeClassifier(random_state=99,min_samples_split=50,max_depth=5)
scores = rf.fit(X_train, Y_train)
print "Score:", scores.score(X_test, Y_test)
dot_data = StringIO()
tree.export_graphviz(rf, out_file=dot_data,feature_names=list(todosAtributos[todosAtributos.columns[0:11]]))
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("ibove.pdf")
Image(graph.create_png())
todosAtributos[todosAtributos.columns[0:11]]
todosAtributos['classes'][0]
ibovespaClasses = pd.read_csv(path+'PhD/src/scriptsPython/indices/ibovespa3Classes.csv',
index_col='Data',
dayfirst=True, parse_dates=True
)
cont=0
for i in xrange(ibovespaClasses.shape[0]-1):
proximoDia = ibovespaClasses.iloc[i+1].classes
diaAtual = ibovespaClasses.iloc[i].classes
if(proximoDia==diaAtual):
cont+=1
print "N match: %d N Total %d"%(cont,ibovespaClasses.shape[0])
print "percentual: ", float(cont)/ibovespaClasses.shape[0]
"""
Modelo com Janela do Ibove com classes balanceadas.
A classe do dia atual tem peso 0.34 em relação as outras classes.
"""
from sklearn import tree
from scipy import stats
from sklearn.metrics import confusion_matrix
melhorAcuraria = 0
melhorJanela = 0
for j in xrange(91):
#Janela é 7, entretando, id começa de 0.
JANELA = j
datasCompletas = todosAtributos.index.unique().tolist()
datasIboves = ibovespaClasses.index.unique()
alvos = []
predicoes = []
#for i in xrange(1):
for i in xrange(len(datasIboves)-JANELA-2):
inicio,fim,teste,alvo = datasIboves[i],datasIboves[i+JANELA],datasIboves[i+JANELA+1],datasIboves[i+JANELA+2]
treino=todosAtributos[inicio:fim]
#print"treinoCompleto",treino
#Quando coloco o .as_matrix garanto que o indece nao participara do treino
t=treino[treino.columns[0:11]]
a=treino['classes']
clf = tree.DecisionTreeClassifier(random_state=99, class_weight='balanced')
clf = clf.fit(t,a)
#teste contem noticias publicadas posteriormente a hora de fechamento do ibovespa
# e anteior a data do proximo dia de ibove
teste = todosAtributos[datasCompletas[datasCompletas.index(fim)+1]:datasCompletas[datasCompletas.index(alvo)-1]]
teste = teste[teste.columns[0:11]]
# prever as cada linha de noticia baseado no aprendizado
classes = clf.predict(teste)
# obtem a moda das classificações das noticias
predicoes.append(stats.mode(classes)[0][0])
# obtem a classificação do dia que quero prever
alvo = todosAtributos[alvo:alvo]
alvo = alvo['classes'][0]
alvos.append(alvo)
result = confusion_matrix(alvos, predicoes)
somaTodosTernos = sum(sum(result))
diagonalPrincipal = sum([result[k][k]for k in xrange(len(result))])
acuracia = float(diagonalPrincipal)/somaTodosTernos
if acuracia > melhorAcuraria:
melhorAcuracia=acuracia
melhorJanela = j
print melhorAcuracia
print melhorJanela
"""
Criação de um modelo de classificação aleatória.
"""
import random
from sklearn.metrics import confusion_matrix
classes = ["+","-","="]
alvos = []
predicoes = []
for index, row in todosAtributos.iterrows():
position = random.randrange(3)
predicoes.append(row.classes)
alvos.append(classes[position])
result = confusion_matrix(alvos, predicoes)
somaTodosTernos = sum(sum(result))
diagonalPrincipal = sum([result[k][k]for k in xrange(len(result))])
acuracia = float(diagonalPrincipal)/somaTodosTernos
print acuracia
"""
Modelo de classificação com treino até notícias as 15hs do dia.
"""
list(todosAtributos[todosAtributos.columns[0:11]])
"""
Neste modelo consideramos que o dia anterior possui peso diferente do treinamento da janela.
"""
todosAtributos = todosAtributos.drop(['Data'], 1)
#todosAtributos.head()
todosAtributos.to_csv(path+'PhD/src/scriptsPython/models/noticiaPorNoticia/arquivoTreino-Ibove3Classes.csv',
sep=',', index=False)
target = todosAtributos.classes.values
train = todosAtributos.values
print todosAtributos.shape
print target,train
import pickle
dataset = {"train":train,
"target": target,
"diasDaSemana":["Sun", "Mon","Tue", "Wed", "Thu","Fri", "Sat"],
"meses":["JAN","FEV","MAR","ABR","MAI","JUN","JUL","AGO","SET","OUT","NOV","DEZ"],
"jornais":["G1", "FOLHASP", "ESTADAO"],
"classes":["+1","-1","0"]
}
pickle.dump(dataset, open(path+'PhD/src/scriptsPython/models/noticiaPorNoticia/arquivoTreino-Ibove3Classes.p', "wb" ))
dataset['train']
Esta seção irá analisar setorialmente, em 3 granularidades de tempo: minuto, hora e dia. Para cada granulairdade de tempo, será apresentada a relação existente entre cada um dos setores e os atributos derivados de notícias.
Agrupamos todas as notícias que ocorreram entre 15 minutos antes e a hora exata em que um negócio foi executado. Com exceção das 10:00h horário de abertura e inicio dos trabalhos na bolsa, onde obtemos todas as notícias entre o fechamento anterior e abertura.
from datetime import datetime,timedelta
def mudaCell(datahora):
horaMinuto = int(str(datahora)[8:])
dataHora = str(datahora)[:-2]
minuto = int(str(datahora)[10:])
if horaMinuto > 1000 and horaMinuto <=1945:
if minuto >0 and minuto<=15:
return dataHora+'15'
elif minuto >15 and minuto <=30:
return dataHora+'30'
elif minuto >30 and minuto <=45:
return dataHora+'45'
return str(int(dataHora)+1)+'00'
else:
datahora = (datetime.strptime(str(datahora),'%Y%m%d%H%M') + timedelta(days=1)).strftime('%Y%m%d%H%M')
dataHora = str(datahora)[:-4]
return dataHora+'1000'
setor15min = pd.read_csv(path+'PhD/src/seriesTemporais/minutos/15min/setor15min.tar.gz',
compression='gzip', index_col=False)
setor15min = setor15min.rename(columns={"setor15min.csv": "setor"})
setor15min['datahora'] = pd.to_numeric(setor15min['datahora'])
setor15min = setor15min[setor15min.datahora <= 201504302359]
noticias = pd.read_csv(path+'PhD/src/seriesTemporais/atributosPorMinuto.csv')
noticias = noticias[noticias.datahora >= 200801010000]
noticias = noticias[['datahora','qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
novasColunas = ['datahora','qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
vfunc = np.vectorize(mudaCell)
datas = vfunc(noticias['datahora'].values)
noticias = noticias[['qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
noticias ['datahora'] = datas
qt = noticias.groupby('datahora')['datahora'].count()
matrix = noticias.groupby('datahora').agg([np.mean, np.median, np.std, np.var, np.sum]).as_matrix()
matrix = np.round(matrix,2)
matrix = np.c_[qt,matrix]
matrix = np.c_[qt.index.values,matrix]
matrix = pd.DataFrame(matrix, columns=novasColunas)
matrix['datahora'] = pd.to_numeric(matrix['datahora'])
result15min = pd.merge(setor15min, matrix, how="left", on='datahora')
#result.to_csv('~/Desktop/setor15minNewFeatures-1.csv',sep=',',encoding='utf-8', index=False)
Calculamos a porcentagem de NaNs para cada setor para verificar a viabilidade de retirar as linhas com NaNs que influenciam no cálculo da correlação. Para nossa surpresa apenas o setor de Construção e Transporte não possue informações suficientes. Todos os demais apresentam número de NaNs inferior a 30%.
setores = result15min['setor'].unique()
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
nans = []
for setor in setores:
rs = result15min[result15min.setor == setor]
for col in colunasNoticias:
qtNaNs = np.count_nonzero(pd.isnull(rs[col].values))
total = float(len(rs[col].values))
pct = qtNaNs/total
if pct > 0.20:
nans.append([setor,col,pct])
porcentagemNaNs = pd.DataFrame(nans, columns=["setor","coluna","%nans"])
print porcentagemNaNs
Este código agrupa as informações por setor e calcula distintamente para cada setor a correlação de Kendall entre colunas de informações técnicas e colunas de informações derivadas das notícias.
Baseado na tabela acima que mostra que nenhuma coluna possui mais que 28% de NaN a nível de comparar de forma justa a correlação sem se influar pela ausência de valores, retiramos da comparação o par (x,y) onde ou x ou y é NaN.
colunasSetores = ['media','negocios','quantidade_papeis','volume_financeiro']
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
tuplas = [(x, y) for x in colunasSetores for y in colunasNoticias]
matrix = []
def f(group):
for colsetor, colnoticia in tuplas:
tau, p_value = kendalltau(group[colsetor].values,group[colnoticia].values.astype(float)
,nan_policy='omit')
matrix.append([group.name,colsetor,colnoticia,tau,p_value])
grouped = result15min.groupby('setor')
grouped.apply(f)
corrAtrSetores15min = pd.DataFrame(matrix, columns=["Setor","Tecnico","Fundamentalista","tau","p-valor"])
corrAtrSetores15min.to_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores15min.csv',sep=',',encoding='utf-8', index=False)
Apresentação do índice de correlação de Kendall entre atributos técnicos e atributos fundamentalistas nos diferentes setores da bolsa da bolsa.
corrAtrSetores15min = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores15min.csv')
corr = corrAtrSetores15min[['Setor', 'Tecnico', 'Fundamentalista',"tau"]]
grouped = corr.groupby('Setor')
rowlength = grouped.ngroups/2 + 1 # fix up if odd number of groups
fig, axs = plt.subplots(figsize=(15,13), nrows=2, ncols=rowlength, sharex=True, sharey=True)
fig.delaxes(axs[0, 4])
cbar_ax = fig.add_axes([.8, .57, .02, .3])
axs = np.delete(axs.flatten(),4)
targets = zip(grouped.groups.keys(), axs)
for i, (key, ax) in enumerate(targets):
c = grouped.get_group(key).pivot('Fundamentalista','Tecnico', "tau")
sns.heatmap(c, ax=ax,cmap="YlGnBu_r", cbar_ax=cbar_ax,cbar=(i == 0))
ax.set_title(key, fontweight='bold', fontsize=11)
plt.show()
Agrupamos todas as notícias que ocorreram entre 1 horas antes e a hora exata em que um negócio foi executado. Com exceção das 10:00h horário de abertura e inicio dos trabalhos na bolsa, onde obtemos todas as notícias entre o fechamento anterior e abertura.
from datetime import datetime,timedelta
def mudaCell(datahora):
hora = int(str(datahora)[8:-2]) #pega a hora
if hora >= 10 and hora <19:
dataHora = int(str(datahora)[:-2]) # pega datahora sem minutos
return str(dataHora+1)
else:
datahora = (datetime.strptime(str(datahora),'%Y%m%d%H%M') + timedelta(days=1)).strftime('%Y%m%d%H%M')
dataHora = str(datahora)[:-4]
return dataHora+'10'
setor1h = pd.read_csv(path+'PhD/src/seriesTemporais/horas/1h/setorHora.csv', index_col=False)
setor1h['datahora'] = pd.to_numeric(setor1h['datahora'])
setor1h = setor1h[setor1h.datahora <= 2015043023]
noticias = pd.read_csv(path+'PhD/src/seriesTemporais/atributosPorMinuto.csv')
noticias = noticias[noticias.datahora >= 200801010000]
noticias = noticias[['datahora','qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
novasColunas = ['datahora','qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
vfunc = np.vectorize(mudaCell)
datas = vfunc(noticias['datahora'].values)
noticias = noticias[['qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
noticias ['datahora'] = datas
qt = noticias.groupby('datahora')['datahora'].count()
matrix = noticias.groupby('datahora').agg([np.mean, np.median, np.std, np.var, np.sum]).as_matrix()
matrix = np.round(matrix,2)
matrix = np.c_[qt,matrix]
matrix = np.c_[qt.index.values,matrix]
matrix = pd.DataFrame(matrix, columns=novasColunas)
matrix['datahora'] = pd.to_numeric(matrix['datahora'])
result1h = pd.merge(setor1h, matrix, how="left", on='datahora')
print result1h.head(10)
setores = result1h['setor'].unique()
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
nans = []
for setor in setores:
rs = result1h[result1h.setor == setor]
for col in colunasNoticias:
qtNaNs = np.count_nonzero(pd.isnull(rs[col].values))
total = float(len(rs[col].values))
pct = qtNaNs/total
if pct > 0.03:
nans.append([setor,col,pct])
porcentagemNaNs = pd.DataFrame(nans, columns=["setor","coluna","%nans"])
print porcentagemNaNs
colunasSetores = ['media','negocios','quantidade_papeis','volume_financeiro']
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
tuplas = [(x, y) for x in colunasSetores for y in colunasNoticias]
matrix = []
def f(group):
for colsetor, colnoticia in tuplas:
tau, p_value = kendalltau(group[colsetor].values,group[colnoticia].values.astype(float)
,nan_policy='omit')
matrix.append([group.name,colsetor,colnoticia,tau,p_value])
grouped = result1h.groupby('setor')
grouped.apply(f)
corrAtrSetores1h = pd.DataFrame(matrix, columns=["Setor","Tecnico","Fundamentalista","tau","p-valor"])
corrAtrSetores1h.to_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1h.csv',sep=',',encoding='utf-8', index=False)
corrAtrSetores1h = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1h.csv')
corr = corrAtrSetores1h[['Setor', 'Tecnico', 'Fundamentalista',"tau"]]
grouped = corr.groupby('Setor')
rowlength = grouped.ngroups/2 + 1 # fix up if odd number of groups
fig, axs = plt.subplots(figsize=(15,13), nrows=2, ncols=rowlength, sharex=True, sharey=True)
fig.delaxes(axs[0, 4])
cbar_ax = fig.add_axes([.8, .57, .02, .3])
axs = np.delete(axs.flatten(),4)
targets = zip(grouped.groups.keys(), axs)
for i, (key, ax) in enumerate(targets):
c = grouped.get_group(key).pivot('Fundamentalista','Tecnico', "tau")
sns.heatmap(c, ax=ax,cmap="coolwarm", cbar_ax=cbar_ax,cbar=(i == 0))
ax.set_title(key, fontweight='bold', fontsize=11)
plt.show()
Agrupamos todas as notícias que ocorreram 1 dia antes do dia atual.
from datetime import datetime,timedelta
def mudaCell(datahora):
datahora = (datetime.strptime(str(datahora),'%Y%m%d%H%M') + timedelta(days=1)).strftime('%Y%m%d%H%M')
return str(datahora)[:-4]
setor1d = pd.read_csv(path+'PhD/src/seriesTemporais/dia/1d/setor_dia.csv', index_col=False)
setor1d['datahora'] = pd.to_numeric(setor1d['datahora'])
setor1d = setor1d[setor1d.datahora <= 20150430]
noticias = pd.read_csv(path+'PhD/src/seriesTemporais/atributosPorMinuto.csv')
noticias = noticias[noticias.datahora >= 200801010000]
noticias = noticias[['datahora','qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
novasColunas = ['datahora','qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
vfunc = np.vectorize(mudaCell)
datas = vfunc(noticias['datahora'].values)
noticias = noticias[['qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
noticias ['datahora'] = datas
qt = noticias.groupby('datahora')['datahora'].count()
matrix = noticias.groupby('datahora').agg([np.mean, np.median, np.std, np.var, np.sum]).as_matrix()
matrix = np.round(matrix,2)
matrix = np.c_[qt,matrix]
matrix = np.c_[qt.index.values,matrix]
matrix = pd.DataFrame(matrix, columns=novasColunas)
matrix['datahora'] = pd.to_numeric(matrix['datahora'])
result1d = pd.merge(setor1d, matrix, how="left", on='datahora')
setores = result1d['setor'].unique()
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
nans = []
for setor in setores:
rs = result1d[result1d.setor == setor]
for col in colunasNoticias:
qtNaNs = np.count_nonzero(pd.isnull(rs[col].values))
total = float(len(rs[col].values))
pct = qtNaNs/total
if pct > 0.03:
nans.append([setor,col,pct])
porcentagemNaNs = pd.DataFrame(nans, columns=["setor","coluna","%nans"])
print porcentagemNaNs
colunasSetores = ['media','negocios','quantidade_papeis','volume_financeiro']
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
tuplas = [(x, y) for x in colunasSetores for y in colunasNoticias]
matrix = []
def f(group):
for colsetor, colnoticia in tuplas:
tau, p_value = kendalltau(group[colsetor].values,group[colnoticia].values.astype(float)
,nan_policy='omit')
matrix.append([group.name,colsetor,colnoticia,tau,p_value])
grouped = result1d.groupby('setor')
grouped.apply(f)
corrAtrSetores1d = pd.DataFrame(matrix, columns=["Setor","Tecnico","Fundamentalista","tau","p-valor"])
corrAtrSetores1d.to_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1d.csv',sep=',',encoding='utf-8', index=False)
corrAtrSetores1d = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1d.csv')
corr = corrAtrSetores1d[['Setor', 'Tecnico', 'Fundamentalista',"tau"]]
grouped = corr.groupby('Setor')
rowlength = grouped.ngroups/2 + 1 # fix up if odd number of groups
fig, axs = plt.subplots(figsize=(15,13), nrows=2, ncols=rowlength, sharex=True, sharey=True)
fig.delaxes(axs[0, 4])
cbar_ax = fig.add_axes([.8, .57, .02, .3])
axs = np.delete(axs.flatten(),4)
targets = zip(grouped.groups.keys(), axs)
for i, (key, ax) in enumerate(targets):
c = grouped.get_group(key).pivot('Fundamentalista','Tecnico', "tau")
sns.heatmap(c, ax=ax,cmap="PuOr", cbar_ax=cbar_ax,cbar=(i == 0))
ax.set_title(key, fontweight='bold', fontsize=11)
plt.show()
Este cálculo medirá o nível de sensibilidade de um determinado setor em relação as notícia publicads em um dado intervalo de tempo. Para isso vamos utilizar as 31 variáveis utilizadas para medir as notícias em relação aos atributos técnicos relacionados a cada setor.
Sejam:
$A$: o conjunto dos atributos de notícias.
$B$: o conjunto dos atributos de ações.
$T$: o conjunto das granularidades de tempo em que a análise foi realizada. $\{15min,1h,1d\}$
$S$: o conjunto de setores da bolsa.
$C = A \times B = \{(a,b) | a \in A \wedge b \in B \}$
A sensibilidade de um determinado setor $s \in S$ em uma janela de tempo $t \in T$ é definada como:
\begin{align} sens(S)_t = \frac{\sum{\tau{(a,b)_t}^2}}{\left\vert{C}\right\vert} \end{align}corrAtrSetores15min = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores15min.csv')
corrAtrSetores1h = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1h.csv')
corrAtrSetores1d = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSetores1d.csv')
def sens(setor, array):
total_cell = 124 #31 * 4
array.append([setor.name,(np.power(setor['tau'],2).sum())/total_cell])
def corrByWindow(dataframe):
array = []
grouped = dataframe.groupby('Setor')
grouped.apply(sens,array)
return pd.DataFrame(array, columns=['Setor','Sensibilidade'])
g15min = corrByWindow(corrAtrSetores15min)
g1h = corrByWindow(corrAtrSetores1h)
g1d = corrByWindow(corrAtrSetores1d)
sensibilidadeTotal = pd.merge(pd.merge(g15min, g1h, how="left", on='Setor'),g1d,how="left", on='Setor')
sensibilidadeTotal.columns = ["Setor", "15min","1h","1d"]
print sensibilidadeTotal
import seaborn as sns
# Make the PairGrid
g = sns.PairGrid(sensibilidadeTotal.sort_values("15min", ascending=False),
x_vars=["15min","1h","1d"], y_vars=["Setor"],
size=4, aspect=.6, despine=False)
# Draw a dot plot using the stripplot function
g.map(sns.stripplot, size=8, orient="h", color="red")
# Use the same x axis limits on all columns and add better labels
g.set(xlim=(0, 0.6), xlabel="Sensibilidade", ylabel="")
# Use semantically meaningful titles for the columns
titles = ["15 minutos", "1 hora", "1 dia"]
for ax, title in zip(g.axes.flat, titles):
# Set a different title for each axes
ax.set(title=title)
# Make the grid horizontal instead of vertical
ax.xaxis.grid(False)
ax.yaxis.grid(True)
sns.despine(left=True, bottom=True)
As mesmas análises realizadas para setores serão agora repetidas para sub-setores, nas mesmas granularidades.
from datetime import datetime,timedelta
def mudaCell(datahora):
horaMinuto = int(str(datahora)[8:])
dataHora = str(datahora)[:-2]
minuto = int(str(datahora)[10:])
if horaMinuto > 1000 and horaMinuto <=1945:
if minuto >0 and minuto<=15:
return dataHora+'15'
elif minuto >15 and minuto <=30:
return dataHora+'30'
elif minuto >30 and minuto <=45:
return dataHora+'45'
return str(int(dataHora)+1)+'00'
else:
datahora = (datetime.strptime(str(datahora),'%Y%m%d%H%M') + timedelta(days=1)).strftime('%Y%m%d%H%M')
dataHora = str(datahora)[:-4]
return dataHora+'1000'
sub_setor15min = pd.read_csv(path+'PhD/src/seriesTemporais/minutos/15min/subSetor15min.tar.gz',
compression='gzip', index_col=False)
sub_setor15min = sub_setor15min.rename(columns={"subSetor15min.csv": "sub_setor"})
sub_setor15min['datahora'] = pd.to_numeric(sub_setor15min['datahora'])
sub_setor15min = sub_setor15min[sub_setor15min.datahora <= 201504302359]
noticias = pd.read_csv(path+'PhD/src/seriesTemporais/atributosPorMinuto.csv')
noticias = noticias[noticias.datahora >= 200801010000]
noticias = noticias[['datahora','qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
novasColunas = ['datahora','qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
vfunc = np.vectorize(mudaCell)
datas = vfunc(noticias['datahora'].values)
noticias = noticias[['qtComentarios', 'qtTweets','qtFacebook' ,'qtLinkedIn' ,'qtGooglePlus', 'polaridade']]
noticias ['datahora'] = datas
qt = noticias.groupby('datahora')['datahora'].count()
matrix = noticias.groupby('datahora').agg([np.mean, np.median, np.std, np.var, np.sum]).as_matrix()
matrix = np.round(matrix,2)
matrix = np.c_[qt,matrix]
matrix = np.c_[qt.index.values,matrix]
matrix = pd.DataFrame(matrix, columns=novasColunas)
matrix['datahora'] = pd.to_numeric(matrix['datahora'])
resultSubSet15min = pd.merge(sub_setor15min, matrix, how="left", on='datahora')
print resultSubSet15min.head(20)
#result.to_csv('~/Desktop/setor15minNewFeatures-1.csv',sep=',',encoding='utf-8', index=False)
sub_setores = resultSubSet15min['sub_setor'].unique()
print sub_setores
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
nans = []
for sub_setor in sub_setores:
rs = resultSubSet15min[resultSubSet15min.sub_setor == sub_setor]
for col in colunasNoticias:
qtNaNs = np.count_nonzero(pd.isnull(rs[col].values))
total = float(len(rs[col].values))
pct = qtNaNs/total
if pct > 0.3:
nans.append([sub_setor,col,pct])
porcentagemNaNs = pd.DataFrame(nans, columns=["sub_setor","coluna","%nans"])
print porcentagemNaNs
colunasTecnicas = ['media','negocios','quantidade_papeis','volume_financeiro']
colunasNoticias = ['qt','mQtCom', 'meQtCom', 'dpQtCom','vQtCom',
'sQtCom', 'mQtTw', 'meQtTw', 'dpQtTw','vQtTw','sQtTw','mQtFb', 'meQtFb',
'dpQtFb','vQtFb','sQtFb','mQtLk', 'meQtLk', 'dpQtLk', 'vQtLk','sQtLk', 'mQtGp',
'meQtGp', 'dpQtGp','vQtGp','sQtGp','mPol', 'mePol', 'dpPol','vPol' ,'sPol']
tuplas = [(x, y) for x in colunasTecnicas for y in colunasNoticias]
matrix = []
def f(group):
for colsetor, colnoticia in tuplas:
tau, p_value = kendalltau(group[colsetor].values,group[colnoticia].values.astype(float)
,nan_policy='omit')
matrix.append([group.name,colsetor,colnoticia,tau,p_value])
grouped = resultSubSet15min.groupby('sub_setor')
grouped.apply(f)
corrAtrSubSetores15min = pd.DataFrame(matrix, columns=["Sub_Setor","Tecnico","Fundamentalista","tau","p-valor"])
corrAtrSubSetores15min.to_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSubSetores15min.csv',sep=','
,encoding='utf-8', index=False)
corrAtrSubSetores15min = pd.read_csv(path+'PhD/src/seriesTemporais/correlacoes/corrAtrSubSetores15min.csv')
corr = corrAtrSubSetores15min[['Sub_Setor', 'Tecnico', 'Fundamentalista',"tau"]]
grouped = corr.groupby('Sub_Setor')
fig, axs = plt.subplots(figsize=(20,23), nrows=4, ncols=7, sharex=True, sharey=True)
fig.delaxes(axs[0, 5])
fig.delaxes(axs[0, 6])
cbar_ax = fig.add_axes([.8, .75, .02, .15])
axs = np.delete(axs.flatten(),5)
axs = np.delete(axs.flatten(),5)
targets = zip(grouped.groups.keys(), axs)
for i, (key, ax) in enumerate(targets):
c = grouped.get_group(key).pivot('Fundamentalista','Tecnico', "tau")
sns.heatmap(c, ax=ax,cmap="seismic", cbar_ax=cbar_ax,cbar=(i == 0))
ax.set_title(key, fontweight='bold', fontsize=11)
plt.show()